我想从远程获取分支,但我的分支名称不以远程名称开头,例如:
git checkout -b BRANCH origin/BRANCH
它在某些情况下有效,但在某些情况下我会收到此错误:
fatal: git checkout: updating paths is incompatible with switching branches.
虽然我确信遥控器有这个分支,但这有效:
git checkout -b origin/BRANCH
之后,我必须切换到另一个分支并将分支原点/ BRANCH重命名为BRANCH,然后再次切换到BRANCH ... 我想知道那个错误意味着什么。
答案 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
。