Git checkout:更新路径与切换分支不兼容

Ikk*_*kke 463 git remote-branch git-checkout

我的问题与切换分支时的致命Git错误有关.

我尝试使用该命令获取远程分支

git checkout -b local-name origin/remote-name
Run Code Online (Sandbox Code Playgroud)

但我收到此错误消息:

致命:git checkout:更新路径与切换分支不兼容.
您是否打算签出无法解析为提交的"origin/remote-name"?

如果我手动创建一个分支然后拉远程分支,它就可以工作,就像创建一个新的克隆并检查分支一样.

为什么它不适用于我使用的存储库?

use*_*628 736

我相信当你试图检查你当地的git repo还不知道的远程分支时会发生这种情况.尝试:

git remote show origin
Run Code Online (Sandbox Code Playgroud)

如果要签出的远程分支位于"新远程分支"而不是"已跟踪远程分支",则需要先获取它们:

git remote update
git fetch
Run Code Online (Sandbox Code Playgroud)

现在它应该工作:

git checkout -b local-name origin/remote-name
Run Code Online (Sandbox Code Playgroud)

  • 这应该是"git fetch REPOSITORY_NAME"来获取该存储库中的所有分支. (21认同)
  • 这解决了我的问题,而不是上面的任意答案. (7认同)
  • 如果你试图为你明确添加的遥控器(所以*除了origin*之外的任何东西)执行此操作,你需要在获取该遥控器之前执行`git remote update`.否则你会收到诸如"你打算结账'upstream-repo/master'之类的消息,这些消息无法解决为提交吗?`请将此添加到答案中,并节省人们阅读相同答案的小时数,这些答案仅适用于原点. (7认同)
  • 如果其他人都在为这一切的疯狂而苦苦挣扎:git fetch origin/branchname是_not_与git fetch相同.前者简单地导致"新的(下一次获取将存储在遥控器/原点)"显示在通过git远程显示原点可见的列中. (4认同)

小智 148

替代语法,

git fetch origin remote_branch_name:local_branch_name
Run Code Online (Sandbox Code Playgroud)

  • 这对我有用.我的远程分支名称不是原产地.我不知道这是否有所作为,因为我一直在喝伏特加酒. (12认同)
  • 这不仅仅是一种替代语法,但在git checkout -b branch_name origin/branch_name不起作用时可以正常工作 (12认同)
  • 是的,我怀疑原始克隆的`--depth`限定符可能是错误的.我使用`git fetch remote_branch_name:local_branch_name`获得了成功,但所有其他建议都失败了. (2认同)

Pål*_*ver 45

在尝试了我在这个帖子中读到的大部分内容之后没有成功,我偶然发现了这个: 远程分支没有出现在"git branch -r"中

原来我的.git/config文件不正确.做了一个简单的修复后,所有分支都出现了.

来自

[remote "origin"]
    url = http://stash.server.com/scm/EX/project.git
    fetch = +refs/heads/master:refs/remotes/origin/master
Run Code Online (Sandbox Code Playgroud)

[remote "origin"]
    url = http://stash.server.com/scm/EX/project.git
    fetch = +refs/heads/*:refs/remotes/origin/*
Run Code Online (Sandbox Code Playgroud)

诀窍

  • 这确实是一个奇怪的配置.它告诉git只从远程获取主分支. (4认同)
  • 如果可以的话,我会投票10次! - 这似乎是克隆时新git所做的一些事情 (3认同)
  • 我遇到了同样的问题,这让我发疯了.任何人都没有看到远程分支机构,请检查! (2认同)

Vir*_*oid 12

不确定这是否对您的问题有用或完全相关,但如果您尝试从远程存储库中仅获取并签出一个分支,则以下git命令将执行此操作:

url= << URL TO REPOSITORY >>
branch= << BRANCH NAME >>

git init
git remote add origin $url
git fetch origin $branch:origin/$branch
git checkout -b $branch --track origin/$branch
Run Code Online (Sandbox Code Playgroud)


Oli*_*alo 11

以上都不适合我.我的情况略有不同,我的远程分支不在原点.但是在不同的存储库中.

git remote add remoterepo GIT_URL.git
git fetch remoterepo
git checkout -b branchname remoterepo/branchname
Run Code Online (Sandbox Code Playgroud)

提示:如果在以下输出中没有看到远程分支,git branch -v -a则无法将其检出.

确认工作在1.7.5.4


Mat*_*att 7

对我来说有用的是:

git fetch
Run Code Online (Sandbox Code Playgroud)

这会将所有refs下载到你的机器上,用于遥控器上的所有分支.然后我就能做到

git checkout <branchname>
Run Code Online (Sandbox Code Playgroud)

这非常有效.类似于最高投票的答案,但更简单一点.