Git - 损坏的对象?

15

我家刚刚遭受停电,此时我正在提交 Git 存储库,但现在报告如下:

user@localhost$ git fsck
fatal: object 192e0282d23863ec80375a77011012ef8cb80f77 is corrupted

我无法提交代码,因为出现了这个错误。但拉取和获取操作似乎还能正常工作。

user@localhost$ git commit
error: unable to find 192e0282d23863ec80375a77011012ef8cb80f77
fatal: 192e0282d23863ec80375a77011012ef8cb80f77 is not a valid object

我尝试重置它,但什么也没有发生

git reset HEAD 192e0282d23863ec80375a77011012ef8cb80f77
git gc

我该如何修复这个问题?

更新: 文件仍然完好无损,所以我只是克隆了一个新的代码库实例,并手动将文件移动到了新的实例中(很高兴这不是唯一的代码库实例!)。但是,我保留了这个有问题的代码库,以便在下次出现问题时可以尝试这里发布的解决方案。


6
+1 是为了表达“非常”不幸的意思。 - Nick
2
备份是个好习惯。自验证的默克尔树的好处在于它们可以原子性地自我验证。但问题在于,它们是原子性地自我验证!这是一个“错误检测”!=“错误纠正”的情况,并且非常严重! - sehe
2个回答

2

我已经到了关于read-tree的部分,但是它失败了。user@localhost$ git read-tree 192e0282d23863ec80375a77011012ef8cb80f77 fatal: object 192e0282d23863ec80375a77011012ef8cb80f77 is corrupted - Xeoncross

1

实际上,使用新克隆的方式来修复问题可能是推荐的方法。如果不必要进行复杂的操作,那么没有意义。这些教程更适用于您的工作树中没有正确版本并且没有其他干净副本的情况。

无论如何,我认为您想要重置到停电之前的最后一次提交,将损坏的对象移出您的.git/objects文件夹,然后再尝试。看起来您的树可能已经损坏了,这就是为什么针对恢复blob的教程没有帮助的原因。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接