git fetch失败“refs / remotes / origin / pr / 34跟踪两者”

时间:2014-02-24 20:21:59

标签: git

我是git的新手,我被困在git fetch上(我对TFS和SVN有更多的经验,所以欢迎任何类比:)

所以我在Github找到了一个我分叉的项目:

我做了一些签到,也做了一个git pull来从源获取最新的更改,在某些时候,我想我点击同步按钮(我正在使用AndroidStudio BTW)我从这里迷路了

它生成了这个commit,我真的不明白,从这里看来,我似乎无法再从源获取最新的添加内容(黑色源上的最后4个更改)

我在git fetch上遇到以下错误:

  

致命:refs / remotes / origin / pr / 34跟踪refs / pull / 34 / head和   参考文献/头/ PR / 34

https://github.com/MohammadAG/Xposed-Tinted-Status-Bar/network Why I can't get the 3 latest changes ?

由于

2 个答案:

答案 0 :(得分:7)

简短版本:遥控器上名为pr/34的分支将成为您的origin/pr/34。但是遥控器上名为refs/pull/34/head的引用也变成了您的origin/pr/34。但他们不能同时成为那样,所以git抱怨并退出。无论是什么设置分支映射都不能很好地在github上设置pull-request分支(但我对这两个软件没有任何了解)。

可能(我不知道)删除+refs/pull/*/head:refs/remotes/origin/pr/* fetch配置行是否合理。或者,您可以将这些映射到其他一些本地引用名称空间,例如refs/pullreqs/origin/*(但是这样的引用名称有点不方便输入)。如果每个pull请求都要在github上创建 {/ 1>} refs/heads/pr/number refs/pull/number/head,我会继续删除一个配置行。< / p>


问题来源的更长解释如下。鉴于此:

+refs/pull/*/head:refs/remotes/origin/pr/*
+refs/heads/*:refs/remotes/origin/*
+refs/heads/*:refs/remotes/origin/*

作为git config --get-all remote.origin.fetch的输出,我可以解释出现了什么问题。 “如何修复它”取决于你想要的结果。

这里的每个输出行都是一个“refspec”,它由三部分组成:+:左侧的名称,以及{{1}右侧的名称}}。两个名称中都允许一个:,它在文件名中与*匹配类似(但不完全一样),例如**.c等。 ,使用第二个*.py,然后使用匹配的第一个*。无论如何,它应该在下面显而易见。

(最后一行是多余的,因此无害,它只会使匹配发生两次。)

所以,让我们看一下上面对ref-names *refs/pull/34/head的意义,这两个名字都存在于名为refs/heads/pr/34的远程中(在github上)。

对于origin:这只匹配第一个refspec。 refs/pull/34/head部分与*匹配。 refspec的右侧表示要将其重写为34,结果是:

refs/remotes/origin/pr/*

现在让我们解决refs/remotes/origin/pr/34 。这与第一个refspec不匹配,但它与第二个匹配。 refs/heads/pr/34部分与*匹配。 refspec的右侧表示将其重写为pr/34,结果是:

refs/remotes/origin/*

请注意refs/remotes/origin/pr/34 上的两个不同名称是如何映射到本地存储库中的相同 final 名称的。 Git不知道是否将您的本地origin设置为等于第一个,或第二个,如refs/remotes/origin/pr/34所示。

要使错误消失,您必须完全丢弃不需要的“额外”匹配,或更改重写规则,以便两个不同的远程origin成为两个不同的本地refs/whatever秒。这意味着您需要更改git配置文件中的refs/remotes/origin/whatever行。

我不知道你想要什么结果,所以我不能说如何重写它们。 (而且,我不知道创建这些内容的原因是什么 - 普通fetch =只创建了一个git clone条目。其他内容添加了冗余条目,而+refs/heads/*:refs/remotes/origin/*添加了一个refs/pull/*/head。这就是那些破坏了东西的东西。那么,加上在github上创建refs/heads/pr/34的事实。)

答案 1 :(得分:2)

当我在本地拉PR,改变PR,然后推到遥控器时,我遇到了类似的问题。当试图获取未来的PR时,我得到了类似的错误。要修复我删除了新的本地分支(合并后),然后删除远程分支(在我的情况下是GitHub)。