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

sae*_*gnu 5 git remote-branch

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

git checkout -b BRANCH origin/BRANCH
Run Code Online (Sandbox Code Playgroud)

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

fatal: git checkout: updating paths is incompatible with switching branches.
Run Code Online (Sandbox Code Playgroud)

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

git checkout -b origin/BRANCH
Run Code Online (Sandbox Code Playgroud)

之后,我必须切换到另一个分支并将分支原点/ BRANCH重命名为BRANCH,然后再次切换到BRANCH ...我想知道该错误的含义.

CB *_*ley 11

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

git checkout可以做两件事之一.如果您只是指定一个分支而不指定任何路径,那么它会将您当前的分支切换到您指定的分支.

git checkout mybranch   # switch to branch 'my branch'
Run Code Online (Sandbox Code Playgroud)

如果你提供一些路径,那么git将从索引中检出这些路径,或者如果你指定一个分支,则从给定的分支中检出.

git checkout myfile   # checkout 'myfile' from index
Run Code Online (Sandbox Code Playgroud)

如您所见,存在潜在的模糊性.如果你有一个被调用的分支myfile或一个被调用的文件会发生什么mybranch

git解决这种歧义的方式是它测试参数以查看它是否首先匹配分支,如果不是,则假定参数引用文件.如果您有一个具有相同名称的分支和文件,则可以强制git将该参数视为具有此语法的文件.

git checkout -- myfile  # treat 'myfile' as a file
Run Code Online (Sandbox Code Playgroud)

-b创建新分支的选项仅在使用分支切换形式时有效,checkout而不是在从索引中签出指定文件时有效.

git checkout -b newbranch myfile  # Illegal. I can't use `-b` when
                                  # I'm checking out files.
Run Code Online (Sandbox Code Playgroud)

如果您尝试git checkout -b newbranch origin/BRANCH并且您收到此错误,则表示origin/BRANCH与您拥有的任何分支的名称不匹配,因此git假定您必须引用文件.

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

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

git checkout -b origin/BRANCH
Run Code Online (Sandbox Code Playgroud)

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