我曾经git reset —-hard sha在一次提交中删除/删除多个提交,然后做了git gc --prune=now. 当我执行 a 时,git log --pretty=oneline --abbrev-commit它会返回我在 reset 命令中使用的 sha 的最新提交。这是我所期待的。
但是,然后我做到了git log --pretty=oneline --abbrev-commit —-all,它正在返回我认为我已剥离的提交。为什么这段历史还在这里?
ETA:主存储库中不存在这些提交
这是分裂头发实际上很重要的情况之一。
当你说你“剥离”了一些提交时,这是不准确的。更具体地说,您从发出reset命令时检出的分支历史记录中删除了这些提交。如果任何其他 ref(另一个分支、标签、当前存储、各种其他东西)可以到达这些提交,那么它仍然可以。
显示所有引用的历史记录的--all选项git log- 而不仅仅是当前分支(您从中删除了提交)。您也许可以使用 的输出git log --graph --all来整理哪些参考文献仍然到达您的提交。如果您可以gitk在您的环境中使用,那可能是一个更好的可视化。
作为附加说明,gc即使没有 refs 仍然可以到达有问题的提交,您的尝试也会失败,因为 reflogs 仍然可以到达它们。在移动所有引用以便不再“知道”这些提交之后,您还必须使任何受影响的引用日志过期。