Git致命错误:引用格式无效:'refs/heads/master'

101

我正在使用Dropbox同步一个git仓库,但现在当我尝试进行push操作时,出现了错误:

fatal: Reference has invalid format: 'refs/heads/master (MacBook-Pro's conflicted copy 2012-10-07)'

看起来,Dropbox 检测到了冲突并创建了一个副本。好的,没问题,所以我删除了有冲突的文件。尽管如此,仍然会出现上述的 git 错误。

$ git checkout master
    M   index.html
    Already on 'master'
$ git add .
$ git commit -a -m "Cleanup repo"
    [master ff6f817] Cleanup repo
    1 file changed, 5 insertions(+), 5 deletions(-)
$ git push
    fatal: Reference has invalid format: 'refs/heads/master (MacBook-Pro's conflicted copy 2012-10-07)'
    The remote end hung up unexpectedly`

我该如何修复这个问题?谢谢。

8个回答

178

如果您对此命令不确定,请备份您的存储库,因为这些命令是不可逆转的。

首先,进入您的存储库目录。

cd myrepo

然后递归搜索冲突文件并将其删除

find . -type f -name "* conflicted copy*" -exec rm -f {} \;

最后,从git的packed-refs文件中删除任何“冲突”的引用。

awk '!/conflicted/' .git/packed-refs > temp && mv temp .git/packed-refs

1
我曾经遇到过同样的问题,这个方法解决了我的问题。谢谢! - erik
这对我也解决了问题。谢谢! - cecconeurale
1
对于 macOS 用户,可以使用以下命令:find . -type f -name "* conflicted copy*" -delete - Soyoes

42

可能存在冲突的文件可能在多个位置,我会查看:

.git/logs/refs/remotes/origin/
.git/logs/refs/heads/
.git/refs/remotes/origin/
.git/refs/heads/

或者你可以在 .git 子目录中到处寻找:find . -name '*conflicted*'

或者,你也可以使用 git branch -a 列出活跃的分支,并删除(git branch -d)任何可疑的内容。


.git 里面到处都是冲突的文件。我把它们全部删掉了,问题解决了。谢谢。 - Justin
2
@Justin 很高兴我能帮到你。如果这个答案或其他任何一个答案解决了你的问题,请将其标记为已接受。 - Marco Leogrande
2
在 Mac OS X 上使用:find . -name '*conflicted*'(编辑:格式) - xgMz
1
@xgMz 谢谢,我会更新我的答案,因为你的解决方案具有普适性。 - Marco Leogrande
1
通过简单的 find 命令,我找到了一个冲突文件,并手动用两个 mv 命令解决了问题。缓慢地、逐步推理是最安全的方法。 - pid

8

当我的同事推送他的更改并在Dropbox更新之前关闭电脑时,我们团队也遇到了这个问题。

我很简单地解决了它。

只需删除冲突的副本。(XXXX的冲突副本yyyy-mm-dd)

然后正常拉取即可。

请注意,我的同事在搞砸之前已经有了更改。他重新推送了更改。这次没有关闭电脑。:)


1
非常完美地为我工作 :) 谢谢 - 对我来说,Dropbox 创建了一些奇怪的字符串文件名,与 "update" 不兼容。 - cV2
1
这对我有用!在/refs/heads文件夹中有一个名称带有“冲突副本”的文件,删除它,然后进行pull/push操作,一切都很好。谢谢! - DiscDev

7
我能够删除.git文件夹中所有冲突的文件,但我仍然会收到有关不存在的文件的错误。
对我来说,解决方法是打开.git/refs/packed_refs并删除包含“conflicted”文本的行。

1

对我来说,出现了错误:

fatal: Reference has invalid format: 'refs/tags/r0.2:3'

您可以前往/.git/packed_refs文件并删除refs/tags/r0.2:3行。

然后它就开始工作了。但是为什么一开始会出现这种情况,我不知道。


0

我在执行以下命令时遇到了相同的错误

致命错误:引用格式无效:'refs/heads/somebranch (1)'

git branch

然后,我使用命令搜索错误的名称(分支名称后跟(1))

find . -name 'somebranch (1)'

它显示了以下结果

./.git/refs/heads/somebranch (1)

这是我认为是一些重复版本的 somebranch。因此,我通过执行查找命令并删除来移除它。

find . -name 'somebranch (1)' -print -exec rm -rf {} \;

然后分支命令成功运行

git branch

0

我遇到了类似的错误,例如:

fatal: Reference has invalid format: 'refs/heads/user-search-api (Sithu's conflicted copy 2016-01-08)'

只需在远程Dropbox存储库中删除文件.git/refs/heads/user-search-api(Sithu的冲突副本2016-01-08)即可解决问题。


0

首先尝试执行 git checkout master 命令,以切换到健康、命名良好的分支。


在原帖中更新了输出结果。 - Justin
嗯,你可以尝试执行完整的 git push origin master 命令,并且请将 git branch -a 的输出粘贴在这里,好吗? - poke
这里也出现了相同的错误...尝试运行 git branch -a 结果就是这个错误! - trusktr
问题出在远程仓库,因此拉取或检出并不能解决它。上面的其他答案提到直接修复远程文件,并且完美地解决了问题。你的建议非常好,但并不是问题的答案。 - pid

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接