Git push错误:目标文件为空/松散对象已损坏

Joe*_*ano 6 git

我试图使用Git Gui执行git提交.我上演了几个文件,然后由于电量不足,我的电脑突然关闭了.我将其插入,重新打开,并提交了我想要的文件.然后我跑了git push,就像我之前做了一百万次没有任何问题,这次我得到以下错误:

Counting objects: 8, done.
error: object file .git/objects/b5/60c934f6bad40f4f246973afc0139ed91a2d32 is empty
Compressing objects: 100% (4/4), done.
error: object file .git/objects/b5/60c934f6bad40f4f246973afc0139ed91a2d32 is empty
fatal: loose object b560c934f6bad40f4f246973afc0139ed91a2d32 (stored in .git/objects/b5/60c934f6bad40f4f246973afc0139ed91a2d32) is corrupt
error: failed to push some refs to 'git@bitbucket.org:joemorano/app.git'
Run Code Online (Sandbox Code Playgroud)

这可能是由于计算机在我执行第一次提交之前关闭了吗?

在所有这一切发生之前,我显然通过bundle install在我的服务器上以root身份运行来破坏我的应用程序的生产版本,现在服务器上的所有内容都搞砸了,但我不知道这会如何影响本地版本.我从未做过git pull或类似的事情.

有没有人遇到此错误?

Aks*_*ade 8

第1步:备份.git(事实上,我在每个更改内容的步骤之间执行此操作,但使用新的副本名称,例如.git-old-1,.git-old-2等) :

cp -a .git .git-old
Run Code Online (Sandbox Code Playgroud)

第2步:运行

git fsck --full
Run Code Online (Sandbox Code Playgroud)

您将收到此错误消息

例如:错误:目标文件.git/objects/0A/dsdadadadaaeer4r3434343434334f为空

第3步:删除上面的空文件,它位于您的.git/objects/文件夹中.继续删除空文件.

第4步:删除所有空文件后,立即运行

git fsck --full
Run Code Online (Sandbox Code Playgroud)

第5步:尝试git reflog.失败,因为HEAD坏了.

第6步:手动获取reflog:

git log origin/master..HEAD
Run Code Online (Sandbox Code Playgroud)

步骤7:请注意,从步骤6开始,我们了解到HEAD当前指向最后一次提交.所以让我们试着看一下父提交:

git show commit-id 
Run Code Online (Sandbox Code Playgroud)

第8步:所以现在我们需要将HEAD指向commit-id

git update-ref HEAD commit-id
Run Code Online (Sandbox Code Playgroud)

希望这对你有用.

  • 谢谢,工作了。:) 在删除损坏的对象后,我做了 `git update-ref HEAD origin/thebranch` 。有很多,我有点担心会有数百个或全部,而且没有可见性(只要告诉我所有空的ffs!:p)。 (3认同)

tor*_*rek 6

... failed to push some refs to 'git@bitbucket.org:joemorano/app.git'
Run Code Online (Sandbox Code Playgroud)

这可能是由于计算机在我执行第一次提交之前关闭了吗?

当然,是的.

有没有人遇到此错误?

修复损坏的git存储库

另请参见:如何修复损坏的git存储库?

在这种情况下,由于你(可能)在bitbucket上有一个非损坏的备份,我首先将它克隆到一个新的(好的)克隆,然后看看我是否可以从现有的(坏的)恢复任何中间提交和文件克隆和/或其工作树,将它们放入新的(好的)克隆中.一旦恢复了从坏克隆中恢复的任何内容,就可以放弃或删除它.(根据您的计算机及其文件系统检查和修复工具,您可能也希望在执行任何其他操作之前运行它们.)