2

我在裸仓库中有一个可用的提交 ID。
git show commit id, 显示带有更改的提交。

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

git branch --contains <commit id>

或者

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

提交 ID 可能发生了什么?

4

3 回答 3

3

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

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

于 2012-08-28T19:33:01.280 回答
1

(对不起我之前的回答,完全偏离主题)。

git refloggit pull如果您或在遥控器上,每次提交都不会进行git clone,所以这个提交可能来自这些操作之一。

另外,我想您检查了提交是否少于 90 天,尽管它可能已经使用默认 gc 设置进行了 gced。

于 2012-08-28T18:23:38.797 回答
0

这些提交被称为悬空提交,我相信git fsck会展示出来。它们仍然存在于 git 存储库中,直到git gcgit prune运行。通常,git gc当 repo 中有太多丢失的对象时会自动运行,并将它们打包到一个包文件中。git gc操作还将在一定时间之前删除 danling 提交。git gc --prune=now并将git prune --expire=now立即删除这些提交。git config --global gc.auto 0将禁用自动 gc 运行。

于 2012-08-28T18:36:11.743 回答