11

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

git checkout -b BRANCH origin/BRANCH

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

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

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

git checkout -b origin/BRANCH

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

4

2 回答 2

15

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

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。如果您没有对您认为应该存在的分支的引用,您可能必须执行 agit fetch从远程检索它。

如果您提供-b但没有分支名称来作为新分支的基础,则 git 默认使用 using HEAD,即您当前签出的分支所在的提交。

git checkout -b origin/BRANCH

这将创建一个基于您当前提交的新本地分支。origin/BRANCH充其量,这可能会引起您的一些困惑,并且听起来根本不是您想要的。

于 2011-06-11T12:39:34.920 回答
3

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

于 2011-06-11T11:51:02.153 回答