我有什么方法可以使用提交历史来修复我的存储库。
# git log
fatal: object 01aeb2bf2e93b238f0e0422816b3e55518321ae7 is corrupted
通过阅读下面的链接,看起来我已经将其删除并重新开始。
答案 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;。
我没有看到任何变化