475

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

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

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

但我收到此错误消息:

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

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

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

4

11 回答 11

745

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

git remote show origin

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

git remote update
git fetch

现在它应该可以工作了:

git checkout -b local-name origin/remote-name
于 2009-09-03T02:52:50.530 回答
152

替代语法,

git fetch origin remote_branch_name:local_branch_name
于 2009-10-23T17:52:54.947 回答
47

在尝试了我在这个线程中可以阅读的大部分内容但没有成功之后,我偶然发现了这个: 远程分支没有出现在“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/*

做到了

于 2013-07-05T09:33:55.167 回答
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
于 2011-02-23T20:42:26.067 回答
11

以上都不适合我。我的情况略有不同,我的远程分支不在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 上工作

于 2011-07-11T20:33:32.230 回答
8

对我来说有效的是:

git fetch

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

git checkout <branchname>

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

于 2012-04-26T20:38:28.230 回答
4

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

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

git 分支来源/远程名称

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

git checkout 来源/远程名称

你会看到:

切换到分支“origin/remote-name”

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

注意:移动到不是本地分支的“origin/rework-isscoring”
如果您想从此结帐创建一个新分支,您可以这样做
(现在或以后)再次使用 -b 和 checkout 命令。例子:
  git 结帐 -b

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

于 2009-10-23T18:22:43.593 回答
3

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

  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
于 2011-09-19T00:34:59.387 回答
3

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

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

于 2017-12-08T15:53:03.547 回答
1

您的问题是否可以与其他 SO 问题“结帐问题”相关联?

即:与以下相关的问题:

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

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

  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] 既重命名分支又重置新分支的新起点,这被认为是不兼容的。

于 2009-06-03T19:31:42.583 回答
1

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

于 2012-05-29T16:23:32.960 回答