当我尝试提交更改时,我得到这个错误:

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对象错误解决方案 只需运行以下命令

find .git/objects/ -size 0 -exec rm -f {} \;
git fetch origin



Refresh index: 100% (5322/5322), done.
error: object file .git/objects/d4/f989f0e5f4613a3cbba836b3c77dfb71a7a56c is empty
error: object file .git/objects/d4/f989f0e5f4613a3cbba836b3c77dfb71a7a56c is empty
error: object file .git/objects/d4/f989f0e5f4613a3cbba836b3c77dfb71a7a56c is empty
fatal: loose object d4f989f0e5f4613a3cbba836b3c77dfb71a7a56c (stored in .git/objects/d4/f989f0e5f4613a3cbba836b3c77dfb71a7a56c) is corrupt

其他回答

我解决了这个问题,删除了git fsck检测到的各种空文件,然后运行一个简单的git拉。

我感到失望的是,现在即使文件系统实现了日志记录和其他“事务性”技术来保持文件系统正常运行,Git也会因为设备上的电源故障或空间问题而进入损坏状态(并且无法自行恢复)。

修复git对象错误解决方案 只需运行以下命令

find .git/objects/ -size 0 -exec rm -f {} \;
git fetch origin



Refresh index: 100% (5322/5322), done.
error: object file .git/objects/d4/f989f0e5f4613a3cbba836b3c77dfb71a7a56c is empty
error: object file .git/objects/d4/f989f0e5f4613a3cbba836b3c77dfb71a7a56c is empty
error: object file .git/objects/d4/f989f0e5f4613a3cbba836b3c77dfb71a7a56c is empty
fatal: loose object d4f989f0e5f4613a3cbba836b3c77dfb71a7a56c (stored in .git/objects/d4/f989f0e5f4613a3cbba836b3c77dfb71a7a56c) is corrupt

这里有一个非常简单和快速的方法来处理这个问题,如果你有一个本地回购和所有你需要的分支和提交,如果你可以创建一个新的回购(或删除服务器的回购并在它的位置上创建一个新的):

在服务器上创建一个新的空回购(或删除旧的回购并在其位置上创建一个新的回购) 将本地副本的远程URL更改为指向新回购的远程URL。 将所有分支从本地回购推到新的服务器回购。

这将保存您在本地回购中拥有的所有提交历史和分支。

如果你在回购上有合作者,那么我认为在很多情况下,你的合作者所要做的就是改变他们本地回购的远程URL,并有选择地推送任何他们拥有的服务器没有的提交。

当我遇到同样的问题时,这个解决方案对我很有效。我有一个合作者。在我将本地回购推到新的远程回购后,他只是将本地回购更改为指向远程回购URL,一切都正常工作。

Git对象文件已经损坏(正如在其他回答中指出的那样)。这可能发生在机器崩溃等情况下。

我也有同样的问题。在阅读了这里的其他顶级答案之后,我发现了修复损坏的Git存储库的最快方法,使用以下命令(在包含.git文件夹的Git工作目录中执行):

(请务必先备份Git存储库文件夹!)

find .git/objects/ -type f -empty | xargs rm
git fetch -p
git fsck --full

这将首先删除导致整个存储库损坏的所有空对象文件,然后从远程存储库获取缺失的对象(以及最新的更改),然后执行完整的对象存储检查。在这一点上,它应该成功而没有任何错误(尽管仍然可能有一些警告!)

PS:这个答案表明你有一个Git存储库的远程副本 在某个地方(例如在GitHub上),损坏的存储库是本地存储库,它绑定到仍然完整的远程存储库。如果不是这样,那么不要尝试用我推荐的方法来修复它。

在我的虚拟机崩溃和Git文件损坏后,我也有同样的问题。

第一步,从项目的根文件夹。

find .git/objects -type f -empty -delete

然后是西梅和fetch…

git prune
git fetch --all --prune

然后做了一些回滚,然后就开始工作了。