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

$ 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

有人能帮我解读一下吗?


当前回答

我犯了完全相同的错误,并设法在不丢失更改的情况下取回了我的回购。

我不知道这是否适用于其他人,因为腐败的原因可能是多方面的,但值得一试

I:

为以防万一,对损坏的git存储库进行了多次备份 从远程存储库克隆最近的推送版本 从损坏的。git文件夹中复制了所有文件,除了所有与HEAD, FETCH_HEAD, ORG_HEAD等相关的文件…最重要的是refs, obj和index 最终得到了一个有效的历史记录,但腐败的索引,应用了这篇文章的解决方案如何解决“错误:坏索引-致命:索引文件腐败”时使用Git

我的存储库又开始工作了……

为了确保我没有推送任何错误,我再次从远程复制,检出我想要从恢复的存储库保存的更改,并将它们提交为新的。

其他回答

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

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

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

Try

git stash

这对我很管用。它会隐藏你没有提交的任何东西,从而解决了问题。

简单地运行一个git修剪修复了这个问题

我在写提交信息的时候电脑死机了。重新启动后,工作树就像我离开时一样,我能够成功提交我的更改。

然而,当我试图运行git状态时,我得到了

error: object file .git/objects/xx/12345 is empty
fatal: loose object xx12345 (stored in .git/objects/xx/12345 is corrupt

与大多数其他答案不同,我并没有试图恢复任何数据。我只是需要Git停止抱怨空对象文件。

概述

“目标文件”是Git对您所关心的实际文件的散列表示。Git认为它应该有一个/文件的散列版本。无论存储在.git/object/xx/12345中的是什么,修复这个错误基本上就是找出“松散对象”应该表示哪个文件的问题。

细节

可能的选择似乎是

删除空文件 将文件转换为Git可以接受的状态

方法1:删除目标文件

我尝试的第一件事就是移动object文件

mv .git/objects/xx/12345 ..

但这并没有起作用——Git开始抱怨断开的链接。关于方法二。

方法2:修复文件

Linus Torvalds写了一篇关于如何恢复目标文件的文章,为我解决了这个问题。这里总结了关键步骤。

$> # Find out which file the blob object refers to
$> git fsck
broken link from    tree 2d9263c6d23595e7cb2a21e5ebbb53655278dff8
           to    blob xx12345
missing blob xx12345

$> git ls-tree 2d926
...
10064 blob xx12345    your_file.whatever

这告诉你空对象应该是哪个文件的哈希值。现在你可以修理了。

$> git hash-object -w path/to/your_file.whatever

在这样做之后,我检查了. Git /objects/xx/12345,它不再是空的,Git停止抱怨。

有同样的问题后,我的linux薄荷崩溃,我按下电源按钮关闭我的笔记本电脑,这就是为什么我的。git是腐败的

find .git/objects/ -empty -delete

在那之后,我得到致命错误:坏对象头。我刚刚重新初始化了我的git

git init

并从远程repo获取

git fetch

要检查git,请使用

git status

又是工作。我不会丢失局部更改,所以我可以在不重写代码的情况下提交