我在裸仓库中有一个可用的提交 ID。
git show commit id
, 显示带有更改的提交。
但是使用以下命令时不会显示相同的提交
git branch --contains <commit id>
或者
git reflog show --all | grep <commit id>
提交 ID 可能发生了什么?
我在裸仓库中有一个可用的提交 ID。
git show commit id
, 显示带有更改的提交。
但是使用以下命令时不会显示相同的提交
git branch --contains <commit id>
或者
git reflog show --all | grep <commit id>
提交 ID 可能发生了什么?
可以创建一个分支,提交它,然后用git branch -D
. 在这种情况下,提交会以这种方式丢失。Reflog 显示现有 refs 的日志。
此外,您的命令不会检查 HEAD 的 reflog。试试看git reflog show HEAD
,如果它还没有被垃圾收集,它可能包含提交(例如,如果它已被制成分离的头部)。
(对不起我之前的回答,完全偏离主题)。
git reflog
git pull
如果您或在遥控器上,每次提交都不会进行git clone
,所以这个提交可能来自这些操作之一。
另外,我想您检查了提交是否少于 90 天,尽管它可能已经使用默认 gc 设置进行了 gced。
这些提交被称为悬空提交,我相信git fsck
会展示出来。它们仍然存在于 git 存储库中,直到git gc
或git prune
运行。通常,git gc
当 repo 中有太多丢失的对象时会自动运行,并将它们打包到一个包文件中。git gc
操作还将在一定时间之前删除 danling 提交。git gc --prune=now
并将git prune --expire=now
立即删除这些提交。git config --global gc.auto 0
将禁用自动 gc 运行。