Git log:致命对象[sha1]已损坏

时间:2010-05-25 23:28:16

标签: git

我有什么方法可以使用提交历史来修复我的存储库。

 # git log
fatal: object 01aeb2bf2e93b238f0e0422816b3e55518321ae7 is corrupted

通过阅读下面的链接,看起来我已经将其删除并重新开始。

http://www.miek.nl/s/7e76eadefe/

6 个答案:

答案 0 :(得分:11)

你在其他地方有这个存储库的克隆吗?假设损坏的对象是blob(文件内容),您可能希望阅读Linus Torvalds的this post来恢复该损坏的对象。

答案 1 :(得分:8)

我在相同的情况下结束了,可能是由于我正在使用的虚拟机关闭不当。在.git /对象中大约有10个对象长度为零。据我所知,实际的源代码文件很好,只是存储库被冲洗了。

$ git status
fatal: object fbcf234634ee04f8406cfd250ce5ab8012f92b08 is corrupted

根据我在其他地方看到的一些建议(包括上面引用的Linus的帖子),我试图暂时移动损坏的对象git在其他地方抱怨.git / objects。什么时候移动了所有这些,我得到了:

$ git status
fatal: bad object HEAD

经过大约一个小时的谷歌搜索和尝试各种解决方案后,我放弃并开始使用'git clone'从原点拉出一个新的工作副本(比我的工作副本大约2小时)。然后我使用rsync -rC(-C排除SCM文件)将已更改的文件从混乱的工作副本复制到我的新工作副本。

答案 2 :(得分:1)

您也可以尝试通过仅从其他存储库复制它们来恢复这些对象。

我的虚拟机在记录推送提交时崩溃,因此对象安全地存储在本地计算机上。我把它们变成了虚拟机,并且没有错误。

答案 3 :(得分:1)

只需删除git抱怨的损坏对象。我刚才就这样解决了同样的问题。

fatal: object 985a4870e7d890b314d2794377045a8b007c7925 is corrupted

对于上述错误,我能够在以下位置找到相应的对象:

project_directory/.git/objects/98/5a4870e7d890b314d2794377045a8b007c7925

你可以看到该文件是0字节并删除它允许fetch开始工作。

大概是先前的提取被中断,留下了大小= 0字节的损坏对象。

答案 4 :(得分:1)

出现同样的问题,无论我运行哪个git命令,最终都会收到消息:

fatal: object <hash> is corrupted

我没有备份而且不想丢失我的提交,因此我决定尝试Jase的解决方案并删除我拥有的0长度文件:.git/objects/00/<hash> 然后得到了同样的结果:

$ git status
fatal: bad object HEAD

然后,我试着知道出了什么问题,然后看了.git/refs/heads/master我有哈希的地方。

我查看了.git/logs/refs/head/master并找到了这样的行:

<old commit> <new commit> <author> <timestamp> commit: <commit message>

我删除了最后一行(有=)并将此行粘贴到.git/refs/heads/master中,删除了其内容

然后我能够成功提交。

答案 5 :(得分:1)

我有同样的问题。我注意到我没有以root用户身份登录。当我以root身份登录时,我能够在没有错误标志的情况下检查日志。

为了巩固这种良好的地位,我做到了这一点:

git add .
git commit -a -m "stabilize git"

我退出root并试图从客户端拉出来。之后它对我有用。

当我进行添加和提交时,我知道我对目录中的内容很满意。通过&#34; git status&#34;。

我没有看到任何变化