Перед моими вопросами я хотел бы знать, правильно ли понято понимание некоторых концепций Git, и, пожалуйста, не стесняйтесь меня исправить:
- имя ветки указывает на кончик (т.е. конечную фиксацию) ветки и
- HEAD указывает на название ветки текущей ветки и
- текущая ветвь определяется как ветвь проверена в рабочем каталоге.
Вот мои вопросы:
-
Когда новая фиксация добавляется к ветке командой Git (любая команда Git, которая может добавить фиксацию в ветку),
Вопросы:
команда Git всегда перемещает имя ветки вперед, указывая на новый коммит?
Или существуют команды Git, которые добавляют новые коммиты к ветке, которая не перемещайте имя ветки и, следовательно, мне нужно запустить некоторые Дополнительная команда Git для ее перемещения?
-
Когда
- новая команда добавляется к текущей ветке командой Git и
- имя ветки перемещается вперед, чтобы указать на новый наконечник наконечника в текущей ветке,
Вопросы:
-
необходимо ли дополнительно обновлять HEAD?
Мое предположение - нет, потому что HEAD уже указал на текущее название ветки, текущее название ветки уже обновлено, чтобы указать на новое tip commit текущей ветки и перемещение текущей ветки имя не изменяет тот факт, что HEAD указывает на текущий название ветки. Таким образом, все выглядит отлично без дополнительных изменений в HEAD.
-
уже обновлен рабочий каталог, чтобы он был таким же, как новый наконечник кончика ветки?
Или может рабочий каталог по-прежнему будет таким же, как предыдущий кончик фиксации ветки, и в чтобы проверить новый наконечник накопления текущей ветки в рабочий каталог, мне нужно запустить еще одну команду Git?
Ниже перечислены два случая/примеры с белыми Git командами (
git push
иgit pull
), что заставило меня задуматься и задать вопросы из этих двух частей для произвольные команды Git, которые могут добавлять фиксации к ветке или к текущей ветке: -
git push
добавляет новые фиксации к ветке на пульте дистанционного управления репозиторий.Предположим теперь, что
- удаленный репозиторий не голый, т.е. имеет рабочий каталог и
- перед нажатием текущей ветки удаленный репозиторий - это ветвь, на которую нужно нажать.
Вопросы:
-
в удаленном репозитории,
git push
переместить имя ветки, чтобы указать на новый отзыв?Или пользователь удаленного репозитория должен запустить некоторую дополнительную команду Git, чтобы переместить ее?
-
В удаленном репозитории
git push
обновить рабочий каталог так же, как новый наконечник накопления? -
т.е. в удаленном репозитории - это обновленная версия (через
git push
) текущей ветки ( "current" доgit push
), тем не менее текущая ветвь послеgit push
? (обратите внимание на определение текущего я дал в начале сообщения: "Текущая ветка определяется как ветвь проверена в рабочем каталоге. ")
Мое предположение - нет, если я правильно понимаю из Control Version Git от Loeliger 2ed, который гласит:
Напомним, что команда Git push не проверяет файлы в получающий репозиторий. Он просто переносит объекты из источника репозитория в принимающий репозиторий, а затем обновляет соответствующие ref на принимающей стороне.
В открытом репозитории это поведение - все, что можно ожидать, потому что нет рабочего каталога, который может быть обновлен извлеченные файлы. Это хорошо. Однако в разработке репозиторий, который является получателем операции push, он может позже вызвать путаницу для всех, кто использует репозиторий разработки.
Операция push может обновлять состояние репозитория, включая HEAD совершить. То есть, хотя разработчик на удаленном конце ничего, ветка refs и HEAD могут измениться, переставая синхронизироваться с проверенными файлами и индексом.
Разработчик, который активно работает в репозитории, в который асинхронное нажатие не увидит толчок. Но последующий фиксация этим разработчиком произойдет на неожиданном HEAD, создав странная история. Усиленный толчок потеряет толкаемые фиксации от другого разработчик. Разработчик в этом репозитории также может оказаться неспособная согласовать свою историю с каким-либо восходящим репозиторием или нисходящий клон, потому что они более не бывают быстрыми вперед, как они должны быть. И она не знает, почему: хранилище тихо из-под нее. Кошки и собаки будут жить вместе. Itll будет плохо.
-
В команде
git pull
шаг слияния объединяет вновь выбранную ветвь удаленного отслеживания в текущую ветку. Если я прав, шаг слиянияgit pull
также увеличивает имя ветки ветки, чтобы указать на новую верхнюю фиксацию на ветке.Вопрос:
-
В локальном репозитории
git pull
обновляет рабочий каталог так же, как новый захваченный отзыв? -
т.е. В локальном репозитории находится обновленная версия (через
git pull
) текущей ветки ( "ток" доgit pull
) по-прежнему текущая ветка послеgit pull
? (обратите внимание на определение текущей ветки, которую я дал в начале сообщения: "текущая ветвь определяется как ветвь проверена в рабочем каталоге." )
Я задал вопрос о
git pull
в Запустил ли Git текущую ветку после шага слияния/переадресации?. Из моего понимания, что означает ответ Джозефа,git pull
проверяет новый захваченный отзыв в рабочий каталог локального репозитория, и мне не нужно запускать дополнительные команды Git, чтобы проверить его. torek ответ велик, но это будет некоторое время, пока я не смогу его понять. -