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