2011-06-11 130 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