Git仓库遍历父级失败错误

14

我是Git的新手,一直很高兴,直到今晚。我经常提交更改。我维护两个远程仓库:Unfuddle和Beanstalk,还有一个本地文件系统远程仓库。

以前从未出现过错误,在一天的工作后,我将更改推送到所有远程仓库,认为这会使我非常安全。没有错误和问题。

今晚,当我尝试查看项目日志时,遇到了以下错误:

error: Could not read a2b6c2fa16e01db9e38d9509606a444e5831330a
fatal: Failed to traverse parents of commit 
       78e81a9a7f5cafa5e2af4b95d156364b9a430ac9
据我所见,历史记录在5月29日之前都是完整的。我无法从任何远程克隆副本。没有其他可以用来恢复存储库的克隆版本。我甚至不知道它是什么时候出了问题。我查看了常见问题解答,但我不知道存储库恢复部分的作者在说什么。
当我运行git fsck命令时,会有155行缺失和悬挂的内容。显然,我希望把这个问题清理干净。如果能从5月29日以后开始重新记录历史记录,我就可以接受没有记录更早期的历史。
是否有人可以帮我解决这个问题?
此外,这可能是什么原因导致的呢?在这段时间里,我唯一想到的改变是我将NetBeans升级到v7,它应该支持git,但似乎不能识别现有的存储库。
2个回答

18

我在谷歌上搜索了这个错误并找到了你的页面,在我的情况下问题出在我做了:

git clone --depth 1 https://github.com/example/nifty.git

但是几个月后,我忘记了我只拿了最新的提交记录,当我尝试将它推送到另一个远程库时,它报错了。花了我一些时间才发现不是一个损坏的repo,而只是因为我没有父级提交记录!希望这对某人有所帮助。

这对我的情况解决了问题:

git fetch --unshallow

8
在这种情况下,你做了什么来解决它? - Zahymaka
哈哈,我编辑了我的答案以展示在我的情况下的解决方案。 - weston
11
我发现当我在完整的存储库上运行--unshallow命令时,会出现fatal: --unshallow on a complete repository does not make sense的错误提示。这可能是git的一个bug,但在运行--unshallow命令之前重新运行git fetch --depth=1似乎能够使git成功地转换为非浅层状态。 - jozxyqk

2
“悬挂”的对象可能不是问题。这可能意味着您已经进行了一些重置、重新定位和/或删除了未完全合并的分支。另一方面,“丢失”更为严重,我认为。看看这篇关于修复损坏的仓库的文章。那可能会对你有所帮助。如果您过时了,也可以尝试升级git。新版本可能会更聪明一些。

谢谢。不过,就像@Andy的回答一样,你指向了同一篇我未能理解的文章。我的情况不同。错误是几周前发生的,无法读取的对象并非损坏,而是不存在。线索似乎断了。 - Peter Harrison

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