我假设你有一个遥控器,所有相关的变化已经推送到它。我不关心本地更改,只是希望避免删除和重新克隆大型存储库。如果您确实有重要的局部更改,您可能需要更加小心。
我的笔记本电脑死机后也遇到了同样的问题。
可能是因为它是一个很大的存储库,我有相当多的损坏的对象文件,当调用git fsck—full时,每次只出现一个,所以我写了一个小的shell一行程序来自动删除其中一个:
$ sudo rm ' git fsck,满2 > & 1 | grep oe - m 1 " . /对象/ [0-9a-f] {2} [0-9a-f] *”的
2>&1将错误消息重定向到标准输出,以便能够对其进行grep
使用的Grep选项:
-o只返回行中实际匹配的部分
-E启用高级正则表达式
-m 1确保只返回第一个匹配项
[0-9a-f]{2}匹配0到9之间的任意字符,如果a和f同时出现,则匹配a和f
[0-9a-f]*匹配0到9之间且a和f同时出现的任意数量的字符
它一次仍然只删除一个文件,所以你可能想在循环中调用它,就像:
$ while为true;做sudo rm的git fsck,满2 > & 1 | grep oe - m 1 " . /对象/ [0-9a-f] {2} [0-9a-f] *”的;完成
这样做的问题是,它不再输出任何有用的东西,所以您不知道它什么时候完成(一段时间后它应该不会做任何有用的事情)。
为了“修复”这个问题,我只需要在每一轮之后调用git fsck—full,如下所示:
$ while为true;做sudo rm的git fsck,满2 > & 1 | grep oe - m 1 " . /对象/ [0-9a-f] {2} [0-9a-f] *”的;Git FSCK—满;完成
它现在的速度大约是原来的一半,但它确实输出了它的“状态”。
在这之后,我玩了一些建议在这里的答案,最后得到了一个点,我可以得到藏匿和藏匿掉很多破碎的东西。
第一个问题解决了
后来我还是有这样一个问题:
无法解析引用'refs/remotes/origin/$branch':引用破裂,可以通过
$ rm \repo.git\refs\remotes\origin$branch
$ git fetch
然后我做了一个
$ git gc -prune=现在
$ git远程修剪来源
为了更好地衡量
Git reflog expire -stale-fix -all
当运行git fsck——full时,清除错误:HEAD: invalid reflog entry $blubb。