2016-11-15 10 views
0

В документации по адресу Github-Help: Syncing a Fork показаны три команды, позволяющие синхронизировать мою вилку GitHub с восходящим репо.Синхронизирующая вилка с восходящим потоком: git fetch + git checkout + git merge vs. git checkout + git pull

git fetch upstream 
git checkout master 
git merge upstream/master 

Могу ли я использовать следующие две команды вместо указанных выше трех?

git checkout master 
git pull upstream/master 

Являются ли два набора команд эквивалентными или существуют различия между ними?

+0

Возможный дубликат [В мерзавца, как извлечь отличается тянуть и как слияние отличается от перебазирования?] (http://stackoverflow.com/ques/14894768/in-git-how-is-fetch-different-than-pull-and-how-merge-different-than-rebase) –

+0

'git pull' =' git fetch' + 'git merge', по крайней мере, вообще –

+0

FYI: 'git pull upstream/master' не так, поскольку третье слово (' upstream/master') должно быть именем * remote *, а 'upstream/master' - это имя * удаленный отслеживание ветка *. Гит, к сожалению, использует очень похожие слова, которые означают очень разные (хотя и связанные) вещи: слово * branch * имеет как минимум два значения, слово * remote * само по себе имеет одно значение, а фраза * ветвь удаленного отслеживания * имеет еще одну , – torek

ответ

0

Эти командные наборы не эквивалентны.

git pull 

делятся на две команды:

git fetch 
git merge 

Проблема заключается в том, принесите, что мерзавец требует удаленной ссылки, а мерзавец слияние требует ссылок отслеживания, поэтому помощь страница Github имеет:

git fetch upstream 

но имеет

git merge upstream/master 

Команда merge примет ветку upstream/master и объединит ее в текущую проверочную ветвь (в данном случае «master»). Но выборки команда не работает на ветке, она требует дистанционного управления, так что, когда вы пытаетесь:

git pull upstream/master 

Git делит это на:

git fetch upstream/master 
git merge upstream/master 

который потерпит неудачу на выборку:

$ git pull upstream/master 
fatal: 'upstream/master' does not appear to be a git repository 
fatal: Could not read from remote repository. 

Please make sure you have the correct access rights 
and the repository exists. 
+0

** Примечание **: 'git pull upstream/master' работает, если вы выполнили' git fetch upstream' хотя бы один раз: 'upstream/master' ссылается на локальную копию удаленной ветви, а не на удаленный сервер. –

+0

@FabienBouleau Это неверно в моей системе. И неудача с извлечением и выводом, использующая 'upstream/master', даже если она уже присутствует. Для Fetch требуется удаленная ссылка, а не ссылка на ветку.Возможно, если вы добавили имя «вверх по течению/мастеру» в качестве удаленного с тем же URL/папкой, что и «вверх по течению», или с некоторыми другими изменениями конфигурации, но не по умолчанию, по крайней мере, когда восходящий поток является вторичным удаленным (т.е. первый). – LightCC

+0

Плохо, в этом случае обозначение 'upstream/master' неверно. Это должно быть 'git pull upstream master' или' git fetch upstream master'. При первом загрузке удаленного репозитория он должен быть 'git fetch upstream' (без' master'), или информация о филиале удаленного отслеживания не будет установлена ​​(только 'FETCH_HEAD'). Используйте 'upstream/master' только для ссылки на ветвь удаленного отслеживания, когда она существует. –