每当我从我的遥控器,我得到以下关于压缩的错误。当我运行手动压缩,我得到相同的:

$ git gc
error: Could not read 3813783126d41a3200b35b6681357c213352ab31
fatal: bad tree object 3813783126d41a3200b35b6681357c213352ab31
error: failed to run repack

有人知道该怎么做吗?

从cat文件中我得到了这个:

$ git cat-file -t 3813783126d41a3200b35b6681357c213352ab31
error: unable to find 3813783126d41a3200b35b6681357c213352ab31
fatal: git cat-file 3813783126d41a3200b35b6681357c213352ab31: bad file

从git fsck中我得到了这个(不知道它是否真的相关):

$ git fsck
error: inflate: data stream error (invalid distance too far back)
error: corrupt loose object '45ba4ceb93bc812ef20a6630bb27e9e0b33a012a'
fatal: loose object 45ba4ceb93bc812ef20a6630bb27e9e0b33a012a (stored in .git/objects/45/ba4ceb93bc812ef20a6630bb27e9e0b33a012a) is corrupted

有人能帮我解读一下吗?


当前回答

只需删除。git文件夹并重新添加。这个简单的解决方法对我很有效。

其他回答

垃圾收集解决了我的问题:

git gc --aggressive --prune=now

它需要一段时间才能完成,但是每个松散的对象和/或损坏的索引都是固定的。

看起来您有一个损坏的树对象。您需要从其他人那里获取该对象。希望他们会有一个未损坏的版本。

如果您无法从其他人那里找到有效的版本,您可以通过猜测应该在那里的文件来重新构建它。您可能想要查看对象的日期和时间是否与它匹配。这些可能是相关的斑点。您可以从这些对象推断出树对象的结构。

看看Scott Chacon关于Git内部的截图。这将向您展示git在引子下是如何工作的,以及如果您真的卡住了,并且无法从其他人那里获得该对象,如何进行此侦探工作。

当在同一个git签出中使用不同版本的不同git客户端时,通常会出现此问题。认为:

命令行 IDE内置git docker / vm容器内部 GIT gui工具

确保您使用创建提交的同一客户端进行推送。

当我遇到这个问题时,我备份了我最近的更改(因为我知道我已经更改了什么),然后删除了它在.git/location中抱怨的文件。然后我做了一个“少不再来”的动作。不过要小心,这可能不适合你。

我以前也遇到过同样的问题。 我只是通过从.git/objects目录中删除object文件来传递它。

对于下面的错误。

$ git fsck
error: inflate: data stream error (invalid distance too far back)
error: corrupt loose object '45ba4ceb93bc812ef20a6630bb27e9e0b33a012a'
fatal: loose object 45ba4ceb93bc812ef20a6630bb27e9e0b33a012a (stored in .git/objects/45/ba4ceb93bc812ef20a6630bb27e9e0b33a012a) is corrupted

解决方案:

转到顶部目录并取消隐藏.git文件夹

在windows上,你可以在cmd上运行这个命令:attrib +s +h .git

然后进入。git/objects文件夹 如上所述的错误消息(存储在.git/objects/45/ba4ceb93bc812ef20a6630bb27e9e0b33a012a)已损坏 您可以看到该对象位于名为“45”的指示器上。因此,进入“。git/objects/45/”目录 最后找到名为ba4ceb93bc812ef20a6630bb27e9e0b33a012a的对象并删除它。

现在,您可以继续使用git status或git add进行检查。您的更改并继续。