ChatGPT解决这个技术问题 Extra ChatGPT

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

我的问题与 Fatal Git error when switching branch 有关。

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

git checkout -b local-name origin/remote-name

但我收到此错误消息:

致命:git checkout:更新路径与切换分支不兼容。您是否打算签出无法解析为提交的“来源/远程名称”?

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

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

自该命令的第一个实例(触发错误消息)以来发生了什么变化?
git init git fetch git fetch git://blabla.com/dir1/Project.git

B
Bruno Bronosky

我相信当您尝试签出本地 git repo 尚不知道的远程分支时会发生这种情况。尝试:

git remote show origin

如果您要签出的远程分支位于“新远程分支”而不是“跟踪的远程分支”下,那么您需要先获取它们:

git remote update
git fetch

现在它应该可以工作了:

git checkout -b local-name origin/remote-name

这为我解决了问题,而不是上述任意答案。
那应该是“git fetch REPOSITORY_NAME”来获取该存储库上的所有分支。
不必要。 git fetch 将从所有远程存储库中获取所有分支。
万一其他人在这一切的疯狂中挣扎: git fetch origin/branchname 与 git fetch 不同。前者只是导致“新的(下一次提取将存储在遥控器/来源中)”显示在通过 git remote show origin 可见的列中。
如果您尝试对显式添加的遥控器执行此操作(因此任何除了来源),您需要在获取该遥控器之前执行 git remote update。否则,您会收到类似 Did you intend to checkout 'upstream-repo/master' which can not be resolved as commit? 的消息,请将此添加到答案中,并节省人们阅读仅适用于来源的相同答案的时间。
P
Peter Mortensen

替代语法,

git fetch origin remote_branch_name:local_branch_name

这对我有用。我的远程分支名称不是起源。我不知道这是否会有所作为,因为我一直在喝伏特加。
这不仅是一种替代语法,而且可以在 git checkout -b branch_name origin/branch_name 不起作用时起作用
这也解决了我在运行“git checkout --track origin/remote-branch”时的问题,它最初给出了与修复前 OP 相同的错误。谢谢!
在运行经过验证的答案后为我工作。
是的,我怀疑原始克隆的 --depth 限定符在这里可能有问题。我在 git fetch remote_branch_name:local_branch_name 上取得了成功,但所有其他建议都失败了。
C
Community

在尝试了我在这个线程中可以阅读的大部分内容但没有成功之后,我偶然发现了这个:Remote branch not showing up in "git branch -r"

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

[remote "origin"]
    url = http://stash.server.com/scm/EX/project.git
    fetch = +refs/heads/master:refs/remotes/origin/master

[remote "origin"]
    url = http://stash.server.com/scm/EX/project.git
    fetch = +refs/heads/*:refs/remotes/origin/*

做到了


这确实是一个奇怪的配置。它告诉 git 只从远程获取主分支。
如果可以的话,我会投票 10 次! - 这似乎是新 git 在克隆时所做的事情
我有同样的问题,这让我发疯。任何没有看到远程分支的人,请检查这个!!
感谢上帝的回答:)
头脑=炸毁!谢谢!
V
VirtualStaticVoid

不确定这是否对您的问题有帮助或完全相关,但如果您尝试从远程存储库中仅获取和签出单个分支,那么以下 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

O
Olivier Refalo

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

git remote add remoterepo GIT_URL.git
git fetch remoterepo
git checkout -b branchname remoterepo/branchname

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

确认在 1.7.5.4 上工作


arf,刚刚意识到 VirtualStaticVoid 有同样的解决方案!
+1 为 git branch -v -a:我有一个错误配置的遥控器,它说 fetch = +refs/heads/*:refs/remotes/master/*,即使遥控器被称为 upstream
M
Matt

对我来说有效的是:

git fetch

这会将所有 refs 拉到您的机器上,用于远程所有分支。那我可以做

git checkout <branchname>

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


P
Peter Mortensen

我怀疑没有名为 remote-name 的远程分支,但您无意中创建了一个名为 origin/remote-name 的本地分支。

您是否有可能在某些时候输入:

git branch origin/remote-name

从而创建一个名为 origin/remote-name 的本地分支?键入此命令:

git checkout origin/remote-name

你会看到:

Switched to branch "origin/remote-name"

这意味着它实际上是一个错误命名的本地分支,或者

Note: moving to "origin/rework-isscoring" which isn't a local branch
If you want to create a new branch from this checkout, you may do so
(now or later) by using -b with the checkout command again. Example:
  git checkout -b

这意味着它确实是一个远程分支。


E
Edward J Beckett

这不是很直观,但这对我来说效果很好......

  mkdir remote.git & cd remote.git & git init
  git remote add origin $REPO
  git fetch origin $BRANCH:refs/remotes/origin/$BRANCH        

然后运行 git branch --track 命令...

  git branch --track $BRANCH origin/$BRANCH

T
Thomas

对我来说,我有一个错字,我的远程分支不存在

使用 git branch -a 列出远程分支


C
Community

您的问题能否与其他 SO 问题 "checkout problem" 相关联?

即:与以下相关的问题:

旧版本的 Git

一个奇怪的签出语法,应该是: git checkout -b [] [],其中 [] 指的是启动新分支的提交的名称,'origin/remote -name' 不是那样的。 (而 git branch 确实支持 start_point 作为远程分支的名称)

注意:checkout.sh script 所说的是:

  if test '' != "$newbranch$force$merge"
  then
    die "git checkout: updating paths is incompatible with switching branches/forcing$hint"
  fi

就像语法 git checkout -b [] [remote_branch_name] 既重命名分支又重置新分支的新起点,这被认为是不兼容的。


问题已经解决了。 git checkout -b local-name remote/remote-branch 确实有效
有趣的是,自该命令的第一个实例(触发错误消息)以来发生了什么变化?
e
eMPee584

在获取了无数次之后,仍然没有出现添加的遥控器,尽管 blob 在池中。结果表明,无论出于何种原因,都不应该将 --tags 选项提供给 git remote add。您可以手动将其从 .git/config 中删除,以使 git fetch 创建引用。