Git损坏的repo:如何从干净的存储库中挑选Git对象



这是关于损坏的Git回购的众多问题之一,正是一个出错的松散对象:

$ git gc
Counting objects: 3299, done.
error: inflate: data stream error (unknown compression method)
error: unable to unpack 831a5d31af4a0af2f5a367689bee27a44efc22c9 header
Delta compression using up to 6 threads.
Compressing objects: 100% (3283/3283), done.
error: inflate: data stream error (unknown compression method)
fatal: loose object 831a5d31af4a0af2f5a367689bee27a44efc22c9 (stored in .git/objects/83/1a5d31af4a0af2f5a367689bee27a44efc22c9) is corrupt
error: failed to run repack

根据该主题的现有答案(我如何处理损坏的git对象文件?,如何修复损坏的git存储库?,或我如何处理由于缺少对象而导致的git损坏?)我已经从损坏的存储库中删除了对象831a5d31

在我的例子中,我有一个存储库的克隆,它似乎保存了我丢失的对象,但在objects/83/1a5d31af4a0af2f5a367689bee27a44efc22c9上没有文件。如何修复我的存储库?

如果文件存在于其他地方

clean存储库的对象已经被重新打包,这就是它不再作为文件存在的原因。

要恢复它,首先使用从干净的存储库中将其保存为文件

git show 831a5d31af4a0af2f5a367689bee27a44efc22c9 > 831a5-file

在损坏的回购中移动831a5-file,并运行

git hash-object -w 831a5-file

确保输出中给出的SHA1是831a5d31af4a0af2f5a367689bee27a44efc22c9

这将存储对象,并且存储库已修复!

如果文件在其他地方不存在

如果文件在其他地方不存在,即在提交之后但在您能够推送之前发生损坏,则有一种方法可以恢复您的回购并重新提交更改。请参阅相关问题的答案。

最新更新