Почему git fetch не создает локальные ветки? - PullRequest
4 голосов
/ 29 апреля 2019

Насколько я понимаю, при каждом запуске git fetch удаленные объекты загружаются локально, и создается легкий указатель с именем FETCH_HEAD для фиксации HEAD удаленной ветви.

Поскольку ветвь - это просто указатель, чем это отличается от создания локальной ветки?Какие конструктивные соображения подтверждают необходимость не создавать локальную ветвь при использовании git fetch?

Ответы [ 2 ]

1 голос
/ 29 апреля 2019

Проверьте эту запись Что означает FETCH_HEAD в Git? .

Поскольку ветвь - это просто указатель, чем это отличается от создания локальной ветки? Какие конструктивные соображения подтверждают необходимость не создавать локальную ветвь при использовании git fetch?

Поскольку git fetch предназначен для репатриации состояния известных удаленных ветвей и связанных с ними отсутствующих объектов. Это отличается от наличия локальной ветки гомолога, которая в этом случае, вероятно, будет настроена для отслеживания его удаленного гомолога.

Ветви очень часто настраиваются для автоматического создания этих локальных ветвей, но только после того, как вы сначала проверите их с помощью git checkout.

0 голосов
/ 30 апреля 2019

git fetch на самом деле может создавать некоторые новые ветви, локально, но не ваши . Для каждой новой ветви она создает ветку удаленного отслеживания , изображение удаленного состояния, с которой вы не можете взаимодействовать, как с вашими локальными ветками, перечисленными в * 1012. *.

Если с вашего последнего извлечения на вашем пульте было создано несколько новых веток, git получит их новые ссылки со всем необходимым происхождением.

Пример:

В вашем местном репо

A---B---C---D <<< master, origin/master

На удаленном «источнике», где была проделана работа (новая ветвь, и master продвинулась)

A---B---C---D---G <<< master
             \
              \
               E---F <<< new-feature

Если вы получите в этот момент, вы получите новую ссылку new-feature (которую вы можете проверить с помощью git branch -r), и origin/master будет обновлено, чтобы указывать на G, но не master, который все равно останется неизменным.

               G <<< origin/master
              /
             /
A---B---C---D <<< master
             \
              \
               E---F <<< origin/new-feature

И затем он также позволяет вам проверить эти новые изменения до , чтобы решить, стоит ли и как их интегрировать в вашу местную работу.

...