可用在裸露的回购中有一个提交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 reflog
如果你在远程地址上使用git pull
或git clone
,每个提交都不会执行,所以也许这个提交来自其中一个操作。
此外,我想你检查了提交不到90天,虽然它可能已被默认gc设置,否则gced。
这些提交被称为悬挂提交,我相信git fsck
将显示它们。它们仍然存在于git存储库中,直到git gc
或git prune
运行。一般情况下,git gc
会自动运行,因为回收库中有太多丢失的对象会被打包成一个包文件。 git gc
操作也将在一定时间之前删除丹灵提交。 git gc --prune=now
和git prune --expire=now
将立即删除这些提交。 git config --global gc.auto 0
将禁用自动gc运行。
感谢郑,我已经禁用了gc,所以如果这是一个悬而未决的提交,它应该在那里。我正在运行“git fsck --unreachable | grep 98d0d”...让我看看我能否找到任何 –
我无法在fsck --unreachable中看到提交ID ...这很奇怪。提交没有在reflog,fsck,fsck --unreachable,branches中显示,但在“git show
可以创建一个分支,提交给它,然后用git branch -D
强制删除它。在这种情况下提交这样丢失。 Reflog显示现有参考的日志。
此外,您的命令不检查HEAD的reflog。尝试git reflog show HEAD
,它可能包含提交(例如,如果它已被制作成分离的头部),如果它尚未被垃圾收集。
很好的答案。我必须想象这几乎肯定是这样。 – Christopher
感谢jolivier,但是如果分支被删除或者sha1 id被修改,这应该在reflog中可用90天,这是我没有看到的。 或者有没有办法找出哪个分支被删除或哪个sha1被替换? –
我在裸露的回购库中检查了此问题,并在2天前完成了此提交。通过从Gerrit codereview中进行挑选,然后推回到特定分支上的裸回购,该提交被应用于克隆。但是现在,该提交ID在该分支上不可用,并且确保该分支未被删除。也没有关于“git reflog”的信息 –
一个可能的原因可能是其他人通过rebasing或其他方式改变了分支,并且强制将新分支推到orgin,并且您在不改变改变的情况下强制拉动这个分支。这会使提交ID不显示在分支或您的引用日志中,但是如果您尚未修剪它们,它们应该位于不可访问的对象列表中。 – weynhamz