2011-06-11 131 views
4

我想獲取從遠程分支機構的名稱相同,但我的分支名不帶遙控的名字開始,例如:獲取遠程分支

git checkout -b BRANCH origin/BRANCH 

它在某些情況下工作,但在一些情況下,我得到這個錯誤:

fatal: git checkout: updating paths is incompatible with switching branches. 

,而我確信,遠程有這個分支,這個工程:

git checkout -b origin/BRANCH 

塔後t,我必須切換到另一個分支,並將分支原點/ BRANCH重命名爲BRANCH,然後再次切換到BRANCH ... 我想知道錯誤的含義。

回答

10

這就是爲什麼你收到錯誤信息,你是。

git checkout可以做兩件事之一。如果你只是指定一個分支並且不指定任何路徑,那麼它會將你當前的分支切換到你指定的分支。

git checkout mybranch # switch to branch 'my branch' 

如果提供一些路徑,Git會結帳無論是從指數的路徑,或者,如果你指定一個分支,從給定的分支。

git checkout myfile # checkout 'myfile' from index 

正如您所看到的,存在潛在的不明確性。如果您有一個名爲myfile的分支或名爲mybranch的文件,會發生什麼?

git解決此歧義的方式是它測試參數以查看它是否首先與分支匹配,如果不是,則它假定該參數引用文件。如果你有一個同名的分支和文件,你可以強制git把這個​​參數作爲一個文件用這種語法來處理。

git checkout -- myfile # treat 'myfile' as a file 

-b選項,這將創建一個新的分支,當您使用的checkout分支開關的形式,而不是當你檢查出從索引中指定的文件纔有效。

git checkout -b newbranch myfile # Illegal. I can't use `-b` when 
            # I'm checking out files. 

如果您嘗試git checkout -b newbranch origin/BRANCH,你會得到這個錯誤就意味着origin/BRANCH不匹配,你有這麼混帳假定您必須指的是文件中的任何分支的名稱。

要顯示您可以執行的遠程分支引用git branch -r。如果您沒有提及您認爲應該存在的分行,則可能需要執行git fetch以從遠程獲取分行。

如果您提供-b但沒有分支名稱以關閉新分支,git默認爲使用HEAD,即您當前簽出分支所處的提交。

git checkout -b origin/BRANCH 

這將創建一個新的當地分支叫origin/BRANCH根據您目前的承諾。充其量,這可能會引起你一些困惑,聽起來並不像你想要的那樣。

+0

非常感謝,非常完整的答案。 – saeedgnu 2011-06-11 12:47:16

2

git checkout切換到某個分支,它不會從遠程存儲庫中獲取它。 git checkout -b也創建分支。要從遠程存儲庫檢索分支,請使用git fetch

+0

Aaah,所以我應該在'git checkout -b BRANCH origin/BRANCH'之前運行'git fetch origin'。謝謝,這解決了我的問題。 (我誤解了* fetch的含義*) – saeedgnu 2011-06-11 12:20:45

+2

是的。在較新版本的git中,後者可以縮寫爲'git checkout BRANCH'。 – svick 2011-06-11 12:32:12

+0

但不適用於其他遙控器(非原產地) – saeedgnu 2011-06-11 12:35:29