问题描述
我发现了许多关于 git fsck
的有趣帖子,所以我想对它们进行一些试验。首先我在这个问题之前阅读的资料来源:
-
How can I find an unreachable commit hash in a GIT repository by keywords?
-
git fsck: how --dangling vs. --unreachable vs. --lost-found differ?
我从这个仓库开始:
* 9c7d1ea (HEAD -> test) f
* cd28884 e
| * 7b7bac0 (master) d
| * cab074f c
|/
* d35af2c b
| * f907f39 r # unreferenced commit
|/
* 81d6675 a
其中 r
是从与 HEAD
分离的 a
创建的。
然后我想在 master
上重新设置 test
,但我有一些未分阶段的更改,所以我这样做了:
git rebase --autostash test
获得(我没有显示 r
但它仍然存在):
* caee68c (HEAD -> master) d
* 2e1cb7d c
* 9c7d1ea (test) f
* cd28884 e
* d35af2c b
* 81d6675 a
接下来我运行:
$ git fsck
#...
dangling commit 6387b70fe14f1ecb90e650faba5270128694613d # stash
#...
$ git fsck --unreachable
#...
unreachable commit 6387b70fe14f1ecb90e650faba5270128694613d # stash
unreachable commit d8bb677ce0f6602f4ccad46123ee50f2bf6b5819 # stash index
#...
$ git fsck --lost-found
#...
dangling commit 6387b70fe14f1ecb90e650faba5270128694613d # stash
dangling commit f907f39d41763accf6d64f4c736642c0120d5ae2 # r
#...
第一个问题
为什么只有 --lost-found
版本会返回 r
提交?为什么 c
之前的 d
和 rebase
没有显示在不可达对象中?我以为我理解了阅读链接问题的区别,但我显然错过了一些东西。我仍然拥有完整的 reflog,但我想您不需要它,因为所有提交(与 stash
相关的提交除外)都已被引用。
我知道我应该创建另一个帖子,但第二个问题是部分相关的。我出于好奇尝试了:
$ git fsck --lost-found --unreachable
#...
unreachable commit 6387b70fe14f1ecb90e650faba5270128694613d # stash
unreachable commit d8bb677ce0f6602f4ccad46123ee50f2bf6b5819 # stash index
unreachable commit f907f39d41763accf6d64f4c736642c0120d5ae2 # r
unreachable commit 7b7bac0608936a0bcc29267f68091de3466de1cf # c before rebase
unreachable commit cab074f2c9d63919c3fa59a2dd63ec874b0f0891 # d before rebase
#...
第二个问题
结合这两个选项,我得到了所有无法访问的提交(而不仅仅是 --lost-found
和 --unreachable
的并集),这是非常出乎意料的。为什么会这样?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)