如何修复使用 Git 推送时出现的“remote: fatal error in commit_refs”错误?

450
当我尝试推送到托管在https://github.com上的master分支时,我收到以下错误信息:

远程:commit_refs中的致命错误

我该如何解决这个问题?

远程仓库在哪里托管/位于哪里?可能是它已经损坏了吗? - André Schild
谢谢你的帮助!远程仓库是 Github。看起来这是一个本地错误(其他人在同一仓库上工作时没有遇到此问题)。 - Tomas Skogberg
这似乎是一个最近的GitHub问题,还可以参考http://pastebin.com/50BL9YTF和http://blastedbio.blogspot.co.uk/2016/05/sync-github-mirror-with-cron.html,也是从2016年5月20日开始。 - Peter Cock
63
如果GitHub服务中断,也会发生这种情况。 - bendman
2
以上方法都没有解决我的问题。但是,一个好老的系统重启解决了它。 - Balázs Koskóci
显示剩余2条评论
10个回答

1065
在我的情况下,当我尝试推送时,GitHub已经宕机了。
只需检查https://www.githubstatus.com 以了解GitHub网站的状态。
当它恢复正常后,您就可以进行推送了。

37
我刚通过一篇stackoverflow回答得知github曾在2014年出现过故障。 - hraban
5
因为我遇到了同样的问题,所以我也刚刚了解到这个 GitHub 状态问题! - Brett Stauner
4
哈哈,还有谁在尝试了上面列出的所有方法之后才使用了这个方法呢? :D (我至少做了 git gc 和 git fsck... :p) - Christophe Priieur
4
我等了10分钟,期间https://www.githubstatus.com/一直报告OK状态。 - mirelon
3
如果你查看SO上的vicke4声誉增益历史,你可以知道GitHub何时宕机。在这些日子里,他获得了+200的声誉值。 - fracz
显示剩余4条评论

155

这对我有帮助:

git gc

那会启动垃圾回收并解决我的错误。


51
git gc 对我没有起作用,但是先运行 git fsck,然后再运行 git gc 就解决了。 - dchest
不确定为什么,但这对我也起作用了。 - tretapey
5
文档:git fsckgit gc - djvg
这对我也起作用了。定期进行一些预防性维护是很好的。 - Chris Ballance

16

确保你的代码库在线。

今天我在试图向Github推送时遇到了这个错误,甚至无法浏览该网站,只能看到他们的独角兽错误信息。


5
尝试在拉取后将当前分支基于上游分支进行变基,例如:
git pull origin master -r

然后再次将其推送:

git push origin master

1
今天早些时候我试过了,我的代码库因为无法推送而完全清空了,幸运的是我在代码编辑器和备份中保存了所有文件,但是似乎 Github 出问题了。 - PrezOfTheUnitedIdiots

4

我向GitHub提出了与http://blastedbio.blogspot.co.uk/2016/05/sync-github-mirror-with-cron.html相关的问题,结果发现是由于受保护的分支设置。GitHub已经改进了错误信息:

$ git push mirror master
Counting objects: 391, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (391/391), done.
Writing objects: 100% (391/391), 99.28 KiB | 0 bytes/s, done.
Total 391 (delta 298), reused 0 (delta 0)
remote: error: GH006: Protected branch update failed for refs/heads/master.
remote: error: You're not authorized to push to this branch. Visit https://help.github.com/articles/about-protected-branches/ for more information.
To git@github.com:HuttonICS/biopython.git
 ! [remote rejected] master -> master (protected branch hook declined)
error: failed to push some refs to 'git@github.com:HuttonICS/biopython.git'

如果您现在再试一次,您应该会得到一个更具建设性的错误报告。在我的情况下,我需要根据https://help.github.com/articles/about-protected-branches/调整受保护分支的设置。

在我的情况下,问题也是由受保护的分支设置引起的。 - Mouse

3

根据我的经验,在 GitHub 上进行大规模推送数十个巨型仓库时,现在(2019年)存在一些速率限制,这会导致出现问题。在某些情况下,这也可能导致“无法读取”的问题。

每次推送之前延迟30秒,这两个问题都会消失,我可以继续处理数百个仓库而不会出现任何问题(唉,别问我为什么)。

注:Original Answer翻译成"最初的回答"


3

打开一个新的终端并尝试,这对我有效。


3
可能只是因为 Github 恢复了,我才能做到这一点。 - Smern

0
在我的情况下,我怀疑一个挂起的 git 进程导致了问题;我杀掉了它并重试,问题就解决了。

这与我的问题最相似 - 我只需要关闭 VSCode,很可能其中有一个 git 进程在后台运行被挂起了。 - Pro Q

-1

对我来说可能与停机有关。需要注意的是,“停机”这个词有点含义。我可以进入GitHub,拉取并执行许多操作。我刚刚从多个其他存储库创建了一个新的repo,并删除了一些内容,更改了gitignore,更改了许多其他内容,但垃圾收集正在文件上进行。

我想我做了太多的更改,某些东西被损坏了,所以我创建了一个新的repo,并将清理后的代码库移动到新的repo中。

但现在,在github.com网站上无法创建新的repo。它在检查repo名称的可用性时锁定,并停留在那里。

倾向于认为GitHub在其API的某个部分存在问题。


补充说明:刚要发布这个回复时,老板娘走进来打扰了我10分钟。服务器创建了新的存储库 100%,现在更新也没有问题了。所以解决方法就是被你的老板娘打断。

(导致无法在 GitHub 网站上创建新存储库的原因可能是负责接受提交的 API 的同一部分存在问题。)

(第二个要点是,在问题出现前后我一直在 GitHub 上工作,所以我对它的停机时间非常敏感,应该大约有 10 分钟左右。所以喝杯咖啡然后再试一次吧。)


附录 2:现在 git gc 也可以正常运行了。之前一直报错:"Unlink of file '.git/objects/pack/pack-cb81eff540c758d04bc7991edbab036cc1bc5211.pack' failed.",多次尝试 gc 都是如此。现在没有错误了。猜测这可能与服务器有关。


-3
从分支中拉取最新的代码对我有帮助,问题解决了:
git pull origin master
git push origin master

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