2011-08-24 48 views
11

使用refspec是一種方便的方法來獲取遠程分支並創建一個類似名稱但具有給定名稱的方法(或者反過來:創建一個具有與本地名稱不同的給定名稱的遠程分支)。我很疑惑一件小事情 - 作爲拉動也將做當前分支合併我希望從不同的行爲:具有refspec差異的Git拉/取指令

git fetch origin master:mymaster 

git pull origin master:mymaster 

上述兩個命令似乎產生完全相同的結果 - 這是一個名爲mymaster的本地分支,與原點/主相同。我是對的還是兩者之間存在模糊的區別?

最後,使用的Refspec將創建一個本地分支一個跟蹤分支,對不對?由於跟蹤分支是自動推送,當一個調用沒有任何參數的git push時AFAIK

回答

24

refspec只是一個源/目標對。在fetch中使用refspec x:y告訴git在這個名爲「y」的repo中創建一個分支,該分支是遠程回購中名爲「x」的分支的副本。沒有其他的。

隨着pull,git在頂部引發合併。首先,使用給定的refspec完成提取,然後將目標分支合併到當前分支中。如果這是令人困惑的,這裏有一個一步一步:

git pull origin master:mymaster 
  1. 轉到來源和獲得分支「大師」
  2. 製作它的副本本地名爲「mymaster」
  3. 合併「mymaster」進入當前分支

完全合格,那將是refs/heads/mymasterrefs/heads/master。爲了比較,git在克隆上設置的默認refspec是+refs/heads/*:refs/remotes/origin/*refs/remotes爲保持遠程分支與本地分支分離提供了一個方便的名稱空間。你在做什麼就是告訴git把遠程追蹤分支放在與你的本地分支相同的命名空間中。

至於「跟蹤分支」,這只是你的配置文件中的一個條目,告訴git將默認情況下將本地分支拖入和拖出的位置。

3

git fetch origin master:mymaster通過從遠程存儲庫的主分支中獲取來更新本地存儲庫中的分支mymaster。

git pull origin master:mymaster並且將其合併到當前分支中。

0

我曾經使用smartgit來創建分支,所以可能在那個分支沒有正確合併到master中。 創建支持分支發佈即支持/ 4.2,標籤自動創建,但現在wehn我嘗試做混帳拉,它顯示我同樣的錯誤。 由於support/4.2 brannch是在github中創建的,但沒有在本地正確合併。 所以我用這個: - git pull起源高手:mymaster

在我的情況 - git pull origin support/4.2:support/4。2

It works :)