当我尝试提交更改时,我得到这个错误:
error: object file .git/objects/31/65329bb680e30595f242b7c4d8406ca63eeab0 is empty
fatal: loose object 3165329bb680e30595f242b7c4d8406ca63eeab0 (stored in .git/objects/31/65329bb680e30595f242b7c4d8406ca63eeab0) is corrupt
我尝试了我得到的 git fsck:
error: object file .git/objects/03/dfd60a4809a3ba7023cbf098eb322d08630b71 is empty
fatal: loose object 03dfd60a4809a3ba7023cbf098eb322d08630b71 (stored in .git/objects/03/dfd60a4809a3ba7023cbf098eb322d08630b71) is corrupt
如何解决这个错误?
这个错误发生在我推动我的提交和我的计算机挂起。
这就是我解决它的方法。
修复步骤
git status
显示空/损坏的目标文件
rm .git/objects/08/3834cb34d155e67a8930604d57d3d302d7ec12
删除它
git status
我得到了致命的:坏对象头部消息
rm .git/index
我移除重置的索引。
git reset
无法解析对象“HEAD”。
git status
git pull
看看发生了什么
tail -n 2 .git/logs/refs/heads/MY-CURRENT-BRANCH
它输出log分支的最后两行,tail - n2,来显示最后两次提交哈希值。
git update-ref HEAD 7221fa02cb627470db163826da4265609aba47b2
我选择最后一个提交哈希
git status
它显示我所有的文件都已删除,因为我删除了.git/index文件
git reset
继续复位
git status
验证我的修复
这里有一个非常简单和快速的方法来处理这个问题,如果你有一个本地回购和所有你需要的分支和提交,如果你可以创建一个新的回购(或删除服务器的回购并在它的位置上创建一个新的):
在服务器上创建一个新的空回购(或删除旧的回购并在其位置上创建一个新的回购)
将本地副本的远程URL更改为指向新回购的远程URL。
将所有分支从本地回购推到新的服务器回购。
这将保存您在本地回购中拥有的所有提交历史和分支。
如果你在回购上有合作者,那么我认为在很多情况下,你的合作者所要做的就是改变他们本地回购的远程URL,并有选择地推送任何他们拥有的服务器没有的提交。
当我遇到同样的问题时,这个解决方案对我很有效。我有一个合作者。在我将本地回购推到新的远程回购后,他只是将本地回购更改为指向远程回购URL,一切都正常工作。