我发现了很多关于 的有趣帖子git fsck
,所以我想对它们进行一些实验。首先,我在这个问题之前阅读的所有资料:
我从这个 repo 开始:
* 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
#...
第二个问题
结合这两个选项,我得到了所有无法访问的提交(而不仅仅是 and 的--lost-found
并集--unreachable
),这是非常出乎意料的。为什么它会这样?