2011-09-27 220 views
27

我試圖從遠程標記創建分支,但似乎無法執行此操作。當我嘗試如何從遠程標記執行「git checkout -b <branchname>」

git checkout -b test origin/deploy 

哪裏起源是遠程和部署是我要檢查出的標籤,但我得到

fatal: git checkout: updating paths is incompatible with switching branches. 
Did you intend to checkout 'origin/deploy' which can not be resolved as commit? 

UPDATE: 我剛剛發現

git fetch --all -t 

對我來說工作不正常。當它下載所有分支時,它並不下載所有標籤,所以當我檢出部署時,它是舊標籤。現在我執行

git fetch --all && git fetch -t 

這樣,當我創建一個基於標籤

git checkout -b test deploy 

新的分支是最新的,與上次部署一個新的分支。

回答

21

我不是一個git的大師,但我用了這樣的事情之前,它似乎已經工作得很好:

git pull (or fetch, just need to make sure you are updated) 
git checkout -b test remotes/origin/deploy 
+0

這不適用於我(MacOs X,遠程託管在github上)我得到:致命:無法更新路徑並切換到分支'6.2.3-ga4'時間 –

+1

確保你試圖跟蹤的分支存在,也就是先做一個git fetch,或者git pull,或者git remote update等等。 –

29

我不確定你可以直接做這個。你可能會堅持做一個取,然後結帳:

git fetch origin 
git checkout -b test tag-name 

順便說一句,我不建議使用像「部署」標籤名稱。

+0

好了,現在我在簽出前,總是做「git fetch --all -t」,但在某些情況下,從標籤創建的分支似乎指向舊部署而不是最後一個。 順便說一句,爲什麼你不使用名稱「部署」? – Sergi

+1

@Sergi,標籤旨在保持固定,但像「部署」這樣的名稱意味着您會經常更改它。最好使用分支來標記隨時間變化的開發線,並讓您的標籤成爲特定版本,如「1.0」。 –

+0

@Joost,哦,別擔心。我在部署時總是創建兩個標記,一個標記爲版本名稱,另一個標記爲deploy,每次進行新部署時都會覆蓋該標記。通過這種方式,其他開發人員可以從部署分支上的最後一個分支進行分支。 任何想法爲什麼有時我會得到指向舊部署的分支?難道是因爲「git fetch -all -t」沒有按預期工作? – Sergi

4

你需要運行

git pull 
git checkout -b <new-branch-name> remotes/origin/<source-branch-name>