昨晚我在写提交信息时遇到了停电。当我重新启动机器后,无法完成提交。我运行了git reset
,添加了更改的文件,然后再次尝试,结果得到了这个:
% git commit
error: inflate: data stream error (incorrect header check)
error: unable to unpack a94406345ac44982b00cf57b4b9660a35436637f header
fatal: a94406345ac44982b00cf57b4b9660a35436637f is not a valid object
git fsck
显示如下:
% git fsck --full
Checking object directories: 100% (256/256), done.
error: inflate: data stream error (incorrect header check)
error: unable to unpack 4346883490a0990e68db0187241abc1642765a73 header
error: inflate: data stream error (incorrect header check)
fatal: loose object 4346883490a0990e68db0187241abc1642765a73 (stored in .git/objects/43/46883490a0990e68db0187241abc1642765a73) is corrupt
我注意到这些信息在抱怨不同的对象。
我在Stack Overflow和网络上搜索并尝试了一些不同的方法,但都没有成功。
- 我没有最近的备份副本。
- 将存储库克隆到另一个目录中没有帮助;新存储库出现了完全相同的问题。
git stash
给出与git commit
相同的消息。所有其他 git 命令似乎都正常工作。
我该如何确定问题所在并进行修复?
git log
输出(仅前几行):
% git log --oneline --decorate --all |head -n 8
253b086 (HEAD, new_tokenize) Normalized tokenizer interface slightly
0f2425a (master) Added procs to eval layer
a4d4c22 Added procedures as a type
d1e15ad (tag: v0.10) Added `if' form with tail call semantics
f94a992 (tag: v0.9) Completed environments
031116e Fixed bug where # on a line by itself caused segfault
3d8b09f Added environments, define and set!
01cc624 Put symbol table implementation into types.c
这是一个小型个人项目;我通常只在(master)上工作,但当时正在进行一个实验(new_tokenize)。253b086是停电前的最后一次成功提交。
git log
或git log --oneline --decorate --all
命令来查看历史记录是什么样子的。 - jkyakogit fsck --full
以查找当前引用有问题对象的内容,可能会很有趣。 - jkyako