发生了什么,没有出现在任何分支但在“git show”中可用

时间:2012-08-28 18:20:09

标签: git git-branch git-commit git-show git-reflog

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

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

git branch --contains <commit id>

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

提交ID会发生什么?

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

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

如果你在遥控器上git refloggit pull

git clone将不会通过每次提交,所以这个提交可能来自其中一个操作。

另外,我想你检查过提交的时间不到90天,虽然它可能已经使用默认的gc设置了。

答案 2 :(得分:0)

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