获取具有相同名称的远程分支

时间:2011-06-11 10:42:53

标签: git remote-branch

我想从远程获取分支,但我的分支名称不以远程名称开头,例如:

git checkout -b BRANCH origin/BRANCH

它在某些情况下有效,但在某些情况下我会收到此错误:

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

虽然我确信遥控器有这个分支,但这有效:

git checkout -b origin/BRANCH

之后,我必须切换到另一个分支并将分支原点/ BRANCH重命名为BRANCH,然后再次切换到BRANCH ... 我想知道那个错误意味着什么。

2 个答案:

答案 0 :(得分:11)

这就是您收到错误消息的原因。

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认为您必须引用文件。

要显示您拥有的远程分支引用,您可以git branch -r。如果您没有对您认为应该存在的分支的引用,则可能必须执行git fetch以从远程检索它。

如果您提供-b但没有分支名称以关闭新分支,则git默认使用HEAD,即当前签出分支的提交。

git checkout -b origin/BRANCH

这将根据您当前的提交创建一个名为origin/BRANCH的新本地分支。这充其量可能会让你感到困惑,听起来并不像你想要的那样。

答案 1 :(得分:2)

git checkout切换到某个分支,它不从远程存储库获取它。 git checkout -b也会创建分支。要从远程存储库检索分支,请使用git fetch