這個問題是在學習Pro git 「遠端分支」時產生的疑問。
問題:
git fetch 在抓取遠端追蹤分支的時候,到底會不會產生本機副本?
先看原文的講解,
如果要同步你的工作,執行 git fetch origin 指令。這個指令尋找「origin」 是哪一個伺服器(在本例中,它是git.ourcompany.com),從中抓取本地沒有的數據,並且更新本地資料庫,移動origin/master 指標指向新的、更新後的位置。
#從圖中來看,因為master分支是本地,從 clone 了遠端倉庫開始(f4265提交點)之後,本地做了兩次提交,產生了新的提交鏈條。同時,伺服器上有其他人推送了提交到伺服器的master分支(31b8e,190a3),因此,當使用git fetch origin 時,我的理解是:
本地master分支不會受到影響,從分叉點即fetch前的origin/master開始,在本地生成了新的一條分支,這條分支確實在本地生成了副本,同時把origin/master指針指向了本地副本的末端。
但讀到下面,又來了這麼一段:
要特別注意的一點是當抓取到新的遠端追蹤分支時,本地不會自動產生一份可編輯的副本(拷貝)。換句話說,在這種情況下,不會有一個新的 serverfix 分支 - 只有一個不可以修改的 origin/serverfix 指標。
我就不懂了,難道我前面的理解是錯的?那 Figure 32 的圖示也是錯的?根本就不會再本地得到 (31b8e,190a3)這兩個提交點,只會在資料庫中得到一個新的 origin/master指標?主要原文說的「從中抓取本地沒有的數據,並且更新本地資料庫」這句話很模糊,這些數據是什麼數據也沒說。
沒毛病。
劃重點,這個分支是 master。
所以,需要使用
git checkout -b serverfix origin/serverfix
建立可編輯的本地副本。只有 master 分支會建立可編輯的本機副本。其它的分支都在
origin/*
下面,需要手動的git checkout -b
。