我在裸回购中有一个可用的提交idgit 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 pull
或git clone
,则每次提交都不会执行git reflog
,因此此提交可能来自其中一个操作。
此外,我想您已经检查了提交不到90天,尽管它可能已经用默认的gc设置进行了gced。
这些提交被称为悬挂提交,我相信git fsck
会显示它们。在git gc
或git prune
运行之前,它们仍然存在于git存储库中。通常,当repo中有太多松散对象时,git gc
会自动运行,这些对象会被打包到一个打包文件中。git gc
操作也会在一定时间之前删除danling提交。CCD_ 12和CCD_ 13将立即移除这些提交。git config --global gc.auto 0
将禁用自动gc运行。