gpt4 book ai didi

Git 存储库损坏( header 检查不正确;松散对象已损坏)

转载 作者:IT王子 更新时间:2023-10-29 00:39:22 24 4
gpt4 key购买 nike

我昨天晚上在写提交消息时遇到了电源故障。当我重新启动机器时,我无法完成提交。我运行 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 和 Web,并尝试了一些不同的方法但无济于事。

  • 我没有最近的备份副本。
  • 将存储库克隆到另一个目录没有帮助;新存储库出现了完全相同的问题。
  • 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 在 .git/objects 中为新提交创建了文件,但没有成功写入它们。我通过一次删除一个并重新运行 git fsck --full 来找到下一个来解决它。我从最初由 git fsck 报告的开始:

% rm -f .git/objects/43/46883490a0990e68db0187241abc1642765a73
% git fsck --full
Checking object directories: 100% (256/256), done.
error: inflate: data stream error (incorrect header check)
error: unable to unpack 86e7247af5865e857a3b61eed99986e2d9538df1 header
error: inflate: data stream error (incorrect header check)
fatal: loose object 86e7247af5865e857a3b61eed99986e2d9538df1 (stored in .git/objects/86/e7247af5865e857a3b61eed99986e2d9538df1) is corrupt
% rm -f .git/objects/86/e7247af5865e857a3b61eed99986e2d9538df1
% git fsck --full
Checking object directories: 100% (256/256), done.
error: inflate: data stream error (incorrect header check)
error: unable to unpack a94406345ac44982b00cf57b4b9660a35436637f header
error: inflate: data stream error (incorrect header check)
fatal: loose object a94406345ac44982b00cf57b4b9660a35436637f (stored in .git/objects/a9/4406345ac44982b00cf57b4b9660a35436637f) is corrupt

等等。在 git fsck 清理干净之前,我删除了五个对象,对应于(我想)我试图提交的五个文件。我猜文件历史根本没有损坏。

顺便说一句,我想到了另一种似乎也有效的方法。 git clone 复制了坏对象,但是 git push 没有。备份后,我创建了一个新的空存储库(--bare,因为否则你无法推送到 master),然后取消暂存我的更改并将两个分支推送到新存储库中。然后只需再次检查它并从我的备份中恢复最新的更改。

如果有人愿意阐明这里的故障机制,我们仍然很感兴趣。

关于Git 存储库损坏( header 检查不正确;松散对象已损坏),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23725925/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com