Git checkout:更新路径与切换分支不兼容
Posted
技术标签:
【中文标题】Git checkout:更新路径与切换分支不兼容【英文标题】:Git checkout: updating paths is incompatible with switching branches 【发布时间】:2010-10-31 01:07:23 【问题描述】:我的问题与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 【参考方案1】:我相信当您尝试签出本地 git 存储库尚不知道的远程分支时会发生这种情况。试试:
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 not 与 git fetch 相同。前者只是导致“新的(下一次提取将存储在遥控器/原点中)”显示在通过 git remote show origin 可见的列中。
如果您尝试对您明确添加的遥控器执行此操作(所以任何除了原点),您需要在获取之前执行git remote update
偏僻的。否则,您会收到 Did you intend to checkout 'upstream-repo/master' which can not be resolved as commit?
之类的消息,请将其添加到答案中,并节省人们阅读仅适用于来源的相同答案的时间。【参考方案2】:
替代语法,
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
上取得了成功,但所有其他建议都失败了。【参考方案3】:
在尝试了我在这个线程中可以阅读的大部分内容但没有成功之后,我偶然发现了这个: 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 在克隆时所做的事情 我遇到了同样的问题,这让我发疯了。没有看到远程分支的任何人,请检查这个!! 感谢上帝的回答 :) 头脑=炸了!谢谢!【参考方案4】:不确定这是否对您的问题有帮助或完全相关,但如果您尝试从远程存储库中仅获取和签出一个 single 分支,那么以下 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
【讨论】:
【参考方案5】:以上都不适合我。我的情况略有不同,我的远程分支不在origin。但在不同的存储库中。
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 forgit branch -v -a
:我有一个错误配置的遥控器,上面写着fetch = +refs/heads/*:refs/remotes/master/*
,即使遥控器被称为upstream
。【参考方案6】:
对我来说有效的是:
git fetch
这会将所有远程分支的所有参考都拉到您的机器上。那我就可以了
git checkout <branchname>
而且效果很好。类似于最高投票的答案,但更简单一些。
【讨论】:
【参考方案7】:我怀疑没有名为 remote-name 的远程分支,但您无意中创建了一个名为 origin/remote-name 的本地分支。
你有没有可能在某个时候输入:
git 分支来源/远程名称因此创建了一个名为 origin/remote-name 的本地分支?输入以下命令:
git checkout 来源/远程名称你会看到:
切换到分支“origin/remote-name”这意味着它确实是一个错误命名的本地分支,或者
注意:移动到不是本地分支的“origin/rework-isscoring” 如果您想从此结帐创建一个新分支,您可以这样做 (现在或以后)再次使用 -b 和 checkout 命令。例子: git 结帐 -b这意味着它确实是一个远程分支。
【讨论】:
【参考方案8】:这不是很直观,但这对我来说效果很好......
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
【讨论】:
【参考方案9】:对我来说,我有一个错字,我的远程分支不存在
使用git branch -a
列出远程分支
【讨论】:
【参考方案10】:您的问题能否与其他 SO 问题 "checkout problem" 相关联?
即:与以下相关的问题:
旧版本的 Git 一种奇怪的检出语法,应该是:git checkout -b [<new_branch>] [<start_point>]
,[<start_point>]
指的是启动新分支的提交的名称,'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 确实有效 有趣,自该命令的第一个实例(触发错误消息)以来发生了什么变化?【参考方案11】:在获取了无数次之后,仍然没有显示添加的遥控器,尽管 blob 在池中。结果表明,无论出于何种原因,都不应该将 --tags 选项提供给git remote add
。您可以手动将其从 .git/config 中删除,以使 git fetch 创建 refs。
【讨论】:
以上是关于Git checkout:更新路径与切换分支不兼容的主要内容,如果未能解决你的问题,请参考以下文章