Git-损坏的链接、缺失和悬空树

12
我之前一直很开心地使用 Git,几天前进行了一些提交,反映在远程仓库上也完好无损。但昨晚我打开 Smartgit Hg,发现有一些树结构丢失了。我执行了 git fsck --full 命令,得到了下面相当长的输出结果。
我是 Git 的新手,通常使用图形界面来完成我的操作。我试着阅读这个网页(https://git.wiki.kernel.org/index.php/GitFaq#How_to_fix_a_broken_repository.3F),但它并没有太多意义,盲目跟随似乎也没用。
我执行了 git ls-tree c957fc03bb53181547142045917211fbc380a8df 命令,并显示了一个文件列表。其中有三个以 100644 开头的文件,于是我进入该目录并运行了 git hash-object -w filename 命令,它输出了与 ls-tree 显示给我的相同的哈希值。
维基页面说我已经完成了。但是,git fsck --full 仍然对该树结构显示相同的消息。我有种感觉,我可能是在错误的地方运行了这些命令。
我试着在这里阅读其他 Git 帖子,但它们对我来说并没有意义。我不会撒谎。Hello! How may I assist you today?

1
尝试将远程仓库克隆到一个新文件夹中。它是否也有这些错误?如果没有,只需使用此克隆并删除已损坏的文件夹即可。 - Daniel Hilgarth
我已经克隆了。它没有错误。我可能会尝试这个,但是只复制文件夹(而不是.git文件夹)从我的“工作目录”到新克隆的目录是安全的吗? - user1262516
如果您希望将您的评论作为答案,我会接受。我把修改后的文件从一个目录移动到了另一个目录,并且它已经识别出我有待处理的文件。现在看来一切都正常。感谢您的帮助。 - user1262516
使用Git 2.10,git fsck --name-objects也可以提供帮助。请参见我的回答 - VonC
2个回答

7

对我来说,简单的git gc就足够了...这给了我一些rm: cannot unlink ... Permission denied的消息。但最终,它似乎对我的情况起作用了。

但可能取决于存储库的损坏程度。


谢谢,这个救了我在 rebase 失败后的仓库。不过最好先备份一下仓库,以防 GC 将您的提交清理掉。 - thenickdude

4
尝试将远程存储库克隆到新文件夹中。
它是否也有这些错误?如果没有,只需使用此克隆并删除损坏的克隆即可。

任何尚未提交的修改文件都可以简单地复制到新文件夹中。重要提示:不要复制.git文件夹。


我还记得以前不先查 Stack Overflow,试用从未听说过的 Git 命令好几个小时,然后放弃一切的时候。啊,最简单的解决方案确实是最甜美的! - David

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