Я привык запускать git pull и другие команды из ветки, над которой я работаю. Но я настроил сервер разработки, на котором работают несколько человек, поэтому я не хочу, чтобы мне приходилось переключать ветки, когда я это делаю. Если я хочу обновить существующую ветку на сервере разработки из репозитория github, который мы все используем, что было бы правильным способом сделать это? Если я запустил команду «git pull github branchname», это просто перетянет ветвь в текущую?
Все примеры git, которые я могу найти, похоже, указывают на то, что сначала вы запускаете checkout branchname, а затем выполняете вытягивание. Я пытаюсь этого избежать. Как я уже сказал, это существующая ветка, и я просто хочу обновить ее до последней версии.
git fetch
должен делать то, что хочешь.git fetch
обновит локальную копию удаленной ветки, но не любую локальную ветвь, даже если она настроена для отслеживания этой конкретной удаленной ветки. Это может быть то, что нужно, а может и не быть. (Изменить: по умолчанию, в любом случае. Можно вызвать его с аргументами, чтобы заставить его вести себя по-другому, но в этом случае аргументы действительно должны быть указаны.)Ответы:
Я искал то же самое и, наконец, нашел ответ, который сработал для меня, в другом сообщении stackoverflow: слияние, обновление и извлечение веток Git без использования проверок
В принципе:
git fetch <remote> <srcBranch>:<destBranch>
источник
pull
есть параметры , которыеfetch
не делает:-s <strategy>
,-Xsubtree=...
который был жизненно важным для меня, так что это не является равноценной заменой. У меня была проблема, описанная здесь: congruityservice.com/blog/… но в моем случае я вообще не хотел оформлять заказ.git pull <remote> <srcBranch>:<destBranch>
.git fetch . origin/master:master
У меня была такая же проблема с необходимостью зафиксировать или сохранить текущие изменения функций, главную ветвь проверки ,
pull
команду do получить все, от удаленной до локальнойmaster
рабочей области, затем снова переключиться на ветвь функции и выполнить,rebase
чтобы обновить ее с помощью мастер.Чтобы все это было сделано, оставьте рабочую область в функциональной ветке и избегайте всех переключений, я делаю следующее:
git fetch origin master:master
git rebase master
И это прекрасно помогает.
источник
feature
и ВСЕ, что вы хотите сделать, это обновить свой локальный код,master
чтобы он соответствовал происхождению, БЕЗ прикосновенияfeature
, просто сделайтеgit fetch origin master:master
... и это как если бы вы это сделали копить-checkoutMaster-Pull-checkoutFeature-stashPop!git merge origin/master
Если вы хотите, чтобы советы местного отделения были перенаправлены после
git fetch
, вам потребуются дополнительные шаги.Более конкретно, предположим , что GitHub репо имеет филиалы
D
,B
,C
иmaster
(причина этого странного ответвлением имя-набора будет ясно , в настоящее время). Вы находитесь на хосте,devhost
и вы находитесь в репозитории, гдеorigin
находится репозиторий github. Вы делаетеgit fetch
, который приносит более все объекты и обновленияorigin/D
,origin/B
,origin/C
, иorigin/master
. Все идет нормально. Но теперь вы говорите , что вы хотите что - то случится, наdevhost
, в местных филиалахD
,B
,C
и / илиmaster
?У меня есть эти очевидные (по крайней мере, для меня) вопросы:
B
) есть коммиты, которых нет в удаленном репозитории (github)? Их следует объединить, переустановить или ...?C
), а рабочий каталог и / или индекс изменены, но не зафиксированы?A
) и / или удалены ветки (D
)?Если ответ на (1): «потому что на
devhost
самом деле он не предназначен для разработки, а скорее является локальным зеркалом, которое просто хранит локально доступную копию репозитория github, чтобы все наши настоящие разработчики могли быстро читать из него, а не медленно читать из github ", то вам нужно" зеркало ", а не" нормальное "репо. У него не должно быть рабочего каталога, и, возможно, он также не должен принимать push-запросы, в этом случае оставшиеся вопросы просто исчезнут.Если есть другой ответ, (2-4) станут проблематичными.
В любом случае, вот способ обновить локальные ссылки на основе удаленных ссылок (например, после запуска
git fetch -p
):Что входит в
... code here ...
раздел, зависит от ответов на вопросы (2-4).источник
использование
вместо. Он обновляет удаленные ссылки и объекты в вашем репо, но оставляет только локальные ветки, HEAD и рабочее дерево.
источник
РЕДАКТИРОВАТЬ: используйте 'git pull'. Он будет извлекать все ветки из репо, а также обновлять до последней версии, если ветка выходит в локальной системе только для текущей ветки. Примечание: git pull эквивалентен fetch + merge, который извлекает все ветки, но объединяет только текущую ветку.
источник
pull
выполняет выборку (которая, да, извлекает все с пульта дистанционного управления), но затем объединяет только текущую ветвь.