2016-11-15 107 views
0

Github-Help: Syncing a Fork的文檔顯示了三條命令讓我的GitHub fork與上游repo保持同步。與上游同步叉:git fetch + git checkout + git merge與git checkout + git pull

git fetch upstream 
git checkout master 
git merge upstream/master 

我可以使用以下兩個命令而不是上述三個嗎?

git checkout master 
git pull upstream/master 

這兩組命令是否等同,還是兩者之間存在差異?

+0

的可能的複製[在Git是如何被獲取比拉不同的又是怎樣的合併比變基不同?(http://stackoverflow.com/ques tits/14894768/in-git-how-is-fetch-different-pull-and-how-is-merge-different-rebase) –

+0

'git pull' ='git fetch' +'git merge',至少在一般情況下 –

+0

僅供參考:'git pull upstream/master'是錯誤的,因爲第三個字('upstream/master')必須是* remote *的名稱,而'upstream/master'是一個*遠程追蹤分支*。不幸的是,Git使用了非常相似的單詞,意思是非常不同的(儘管相關):單詞* branch *至少有兩個含義,單詞* remote *本身具有一個含義,而短語* remote-tracking branch *有另一個含義。 – torek

回答

0

這些命令集不相同。

git pull 

被分成兩個命令:

git fetch 
git merge 

的問題是,git的提取需要一個遠程引用,而Git合併需要跟蹤引用,這就是爲什麼Github的幫助頁面有:

git fetch upstream 

但它有

git merge upstream/master 

合併命令將採用upstream/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 fetch upstream'至少一次:'git pull upstream/master'工作:'upstream/master'引用遠程分支的本地副本,而不是遠程服務器上的副本。 –

+0

@FabienBouleau這在我的系統上不正確。即使當它已經存在時,使用'upstream/master'的提取和拉取都會失敗。提取需要遠程引用,而不是分支引用。也許如果您將遠程名稱「upstream/master」添加爲具有與「上游」相同的URL /文件夾的遠程設備,或者其他配置更改(但不是默認情況下),至少當上遊是輔助遠程設備時(即添加了源第一)。 – LightCC

+0

我的不好,在這種情況下'upstream/master'這個符號是錯誤的。它必須是'git pull upstream master'或'git fetch upstream master'。並且第一次下載遠程倉庫時,它必須是'git fetch upstream'(沒有'master'),或者遠程跟蹤分支信息不會被設置(只有'FETCH_HEAD')。使用'upstream/master'只能在遠程追蹤分支存在時引用遠程追蹤分支。 –