Git损坏的repo:如何从干净的存储库中选择一个git对象

Cha*_*esB 7 git repository corruption

这是关于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
Run Code Online (Sandbox Code Playgroud)

关于这个问题的现有答案(如何处理损坏的git对象文件?, 如何修复损坏的git存储库?或者由于缺少对象而导致Git损坏怎么办?)我已经831a5d31从损坏的存储库中删除了对象.

在我的情况下,我有一个存储库的克隆,似乎保存我缺少的对象,但没有文件objects/83/1a5d31af4a0af2f5a367689bee27a44efc22c9.如何修复我的存储库?

Cha*_*esB 10

如果文件存在于别处

清理存储库的对象已重新打包,这就是它不再存在为文件的原因.

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

git show 831a5d31af4a0af2f5a367689bee27a44efc22c9 > 831a5-file
Run Code Online (Sandbox Code Playgroud)

移入831a5-file损坏的仓库,然后运行

git hash-object -w 831a5-file
Run Code Online (Sandbox Code Playgroud)

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

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

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

如果该文件在其他地方不存在,即在提交之后但在您能够推送之前发生了损坏,则有一种方法可以恢复您的存储库并重新提交更改.查看相关问题的答案.