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

Git checkout: updating paths is incompatible with switching branches

我的问题与切换分支时的严重Git错误有关。

我试图用命令获取一个远程分支

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

但我收到了这个错误消息:

fatal: git checkout: updating paths is incompatible with switching branches.
Did you intend to checkout 'origin/remote-name' which can not be resolved as commit?

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

为什么它不能在我使用的存储库中工作?


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

1
git remote show origin

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

1
2
git remote update
git fetch

现在应该可以工作了:

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


替换语法,

1
git fetch origin remote_branch_name:local_branch_name


在尝试了我在这篇文章中所能读到的大部分内容之后,我偶然发现了一个:远程分支未显示在"git branch-r"中

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

从出发

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

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

做了这个把戏


不确定这是否有帮助或与您的问题完全相关,但是如果您试图从远程存储库中仅提取和签出一个分支,那么下面的git命令将实现此功能:

1
2
3
4
5
6
7
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

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

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

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

1.7.5.4确认工作


对我来说,起作用的是:

1
git fetch

它将远程所有分支的所有引用都下拉到您的机器上。然后我可以做

1
git checkout <branchname>

而且效果很好。类似于投票结果最高的答案,但有点简单。


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

是否可能在某个时间键入:

1
git branch origin/remote-name

这样就创建了一个名为origin/remote name的本地分支?键入此命令:

1
git checkout origin/remote-name

你要么看到:

1
Switched to branch"origin/remote-name"

这意味着它实际上是一个误称的本地分支机构,或者

1
2
3
4
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

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


这不是很直观,但这对我很有效…

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

然后运行git分支--track命令…

1
  git branch --track $BRANCH origin/$BRANCH

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

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


在获取无数次后,仍然添加了遥控器,但没有出现,尽管斑点在池中。事实证明,无论出于什么原因,不应该给git remote add使用--tags选项。您可以手动将其从.git/config中删除,以使git fetch创建引用。


你的问题能和另一个问题"结帐问题"联系起来吗?

即:与以下相关的问题:

  • Git的旧版本
  • 一种奇怪的签出语法,应该是:git checkout -b [] [],其中[]指的是启动新分支的commit的名称,而'origin/remote-name'不是这样的。(而git branch确实支持一个起点,即远程分支的名称)

注意:checkout.sh脚本所说的是:

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

这就像语法git checkout-b[[远程分支名称]重命名分支并重置新分支的新起始点,这被认为是不兼容的。