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

$ 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

有人能帮我解读一下吗?


当前回答

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

find .git/objects/ -empty -delete

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

git init

并从远程repo获取

git fetch

要检查git,请使用

git status

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

其他回答

user1055643的答案缺少最后一步:

rm -fr .git
git init
git remote add origin your-git-remote-url
git fetch
git reset --hard origin/master
git branch --set-upstream-to=origin/master master

我也有同样的问题(不知道为什么)。

此修复需要访问未损坏的存储库远程副本,并将保持本地工作副本的完整性。

但它也有一些缺点:

您将丢失任何未推送的提交记录,并且必须重新提交它们。 你会丢失所有的钱。

修复

从repo上面的父目录执行这些命令(将'foo'替换为项目文件夹的名称):

创建损坏目录的备份: cp -R foo foo-backup 创建远程存储库的新克隆到一个新目录: Git克隆Git @www.mydomain.de:foo foo-newclone 删除损坏的.git子目录: Rm -rf foo/.git 将新克隆的.git子目录移到foo中: mv foo-newclone /。git foo 删除临时新克隆的其余部分: Rm -rf foo-newclone

在Windows上,你需要使用:

copy而不是cp -R rmdir /S代替rm -rf 移动而不是mv

现在foo恢复了它原来的.git子目录,但所有的本地更改仍然在那里。Git状态、提交、拉取、推送等再次正常工作。

当我的系统崩溃时,我遇到了这种情况。我所做的是:

(请注意,您的损坏提交将丢失,但更改将保留。你可能必须在这个过程结束时重新创建这些提交)

备份代码。 转到您的工作目录并删除.git文件夹。 现在将远程复制到另一个位置,并在其中复制.git文件夹。 将其粘贴到工作目录中。 做你想做的事。

这似乎是Dropbox或符号链接文件夹出Dropbox为我的一个问题。其他类似的服务可能也是如此。当我去git push时,我会得到腐败松散对象错误。对我来说,在macOS Big Sur上,修复方法只是将回购的递归副本复制到Dropbox之外的目录中。我相信这导致Dropbox为损坏的动态引用拉出实时文件。复制后,我立即能够git推送没有错误。

最好的办法可能是简单地从远程存储库(即GitHub或其他)重新克隆。不幸的是,你将失去任何未推送的提交和隐藏的更改,但你的工作副本应该保持完整。

首先对本地文件进行备份。然后从你的工作树的根开始:

rm -fr .git
git init
git remote add origin [your-git-remote-url]
git fetch
git reset --mixed origin/master
git branch --set-upstream-to=origin/master master

然后根据需要提交任何更改过的文件。