未显示在任何分支中但在"git show"中可用的提交发生了什么情况



我在裸回购中有一个可用的提交id
git show commit id显示了带有更改的提交。

但是使用以下命令时不会显示相同的提交

git branch --contains <commit id>

git reflog show --all | grep <commit id>

提交id可能发生了什么?

可以创建一个分支,提交给它,然后用git branch -D强制删除它。在这种情况下,提交会以这种方式丢失。Reflog显示现有引用的日志。

此外,您的命令不会检查HEAD的reflog。试试git reflog show HEAD,如果它还没有垃圾收集,它可能包含提交(例如,如果它已经被制作成分离的头)。

(很抱歉我之前的回答,完全偏离主题)。

如果您在远程上执行git pullgit clone,则每次提交都不会执行git reflog,因此此提交可能来自其中一个操作。

此外,我想您已经检查了提交不到90天,尽管它可能已经用默认的gc设置进行了gced。

这些提交被称为悬挂提交,我相信git fsck会显示它们。在git gcgit prune运行之前,它们仍然存在于git存储库中。通常,当repo中有太多松散对象时,git gc会自动运行,这些对象会被打包到一个打包文件中。git gc操作也会在一定时间之前删除danling提交。CCD_ 12和CCD_ 13将立即移除这些提交。git config --global gc.auto 0将禁用自动gc运行。

最新更新