2009-06-03 110 views
447

我的问题与Fatal Git error when switching branch有关。Git结帐:更新路径与交换分支不兼容

我尝试用命令

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

抓取远程分支,但我得到此错误消息:

致命:git的结帐:在更新路径是与开关支路不相容。
您是否打算签出无法解析为“提交”的“origin/remote-name”?

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

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

+1

自该命令的第一个实例(触发错误消息)以来发生了什么变化? – VonC 2009-06-03 19:43:21

+0

git init git fetch git fetch git://blabla.com/dir1/Project.git – 2012-11-30 18:20:34

回答

721

我认为这发生在您尝试结帐远程分支时,您的本地git仓库还不知道。尝试:

git remote show origin 

如果要检出远程分支是“新远程分支机构”下,而不是“跟踪远程分支机构”,那么您需要首先获取它们:

git remote update 
git fetch 

现在它应该工作:

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

这解决了我的问题,而不是以上的任意答案。 – Jessedc 2010-03-10 21:58:18

+21

这应该是“git fetch REPOSITORY_NAME”以获取该存储库上的所有分支。 – 2010-03-24 22:36:07

1

您的问题是否可以链接到其他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的结帐-b [] [ remote_branch_name]重命名分支并重新设置新分支的新起点,这被认为是不兼容的。

+0

问题解决了。 git checkout -b本地名远程/远程分支确实有效 – Ikke 2009-06-03 19:38:51

+1

有趣的是,自该命令的第一个实例(触发错误消息)以来发生了什么变化? – VonC 2009-06-03 19:43:07

144

替代语法,

git fetch origin remote_branch_name:local_branch_name 
3

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

是否有可能你在某个时刻键入:

 
git branch 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 

这意味着它真的是一个远程科。

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 
11

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

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

提示:如果你没有看到下面的输出git branch -v -a远程分支没有办法检查出来。

证实工作的上1.7.5.4

3

这不是很直观,但是这很适合我......

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

然后运行的Git分支--track命令

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

对我工作是:

git fetch 

将所有参考文件下拉到您的机器上,以获取远程的所有分支。然后我可以做

git checkout <branchname> 

而且工作完美。类似于顶级投票答案,但更简单一点。

1

获取数十亿次后仍然添加远程没有显示,虽然斑点在池中。原因为- 标记选项不应给予git remote add出于任何原因。你可以手动从.git/config中删除它来使git获取创建refs。

41

尝试过的大部分东西,我可以在这个线程没有成功读取之后,我偶然发现这一个: 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/* 

的伎俩

0

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

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