2012-08-28 26 views

回答

1

(对不起,我以前的答案,完全脱离主题)。

git reflog如果你在远程地址上使用git pullgit clone,每个提交都不会执行,所以也许这个提交来自其中一个操作。

此外,我想你检查了提交不到90天,虽然它可能已被默认gc设置,否则gced。

+0

感谢jolivier,但是如果分支被删除或者sha1 id被修改,这应该在reflog中可用90天,这是我没有看到的。 或者有没有办法找出哪个分支被删除或哪个sha1被替换? –

+0

我在裸露的回购库中检查了此问题,并在2天前完成了此提交。通过从Gerrit codereview中进行挑选,然后推回到特定分支上的裸回购,该提交被应用于克隆。但是现在,该提交ID在该分支上不可用,并且确保该分支未被删除。也没有关于“git reflog”的信息 –

+0

一个可能的原因可能是其他人通过rebasing或其他方式改变了分支,并且强制将新分支推到orgin,并且您在不改变改变的情况下强制拉动这个分支。这会使提交ID不显示在分支或您的引用日志中,但是如果您尚未修剪它们,它们应该位于不可访问的对象列表中。 – weynhamz

0

这些提交被称为悬挂提交,我相信git fsck将显示它们。它们仍然存在于git存储库中,直到git gcgit prune运行。一般情况下,git gc会自动运行,因为回收库中有太多丢失的对象会被打包成一个包文件。 git gc操作也将在一定时间之前删除丹灵提交。 git gc --prune=nowgit prune --expire=now将立即删除这些提交。 git config --global gc.auto 0将禁用自动gc运行。

+0

感谢郑,我已经禁用了gc,所以如果这是一个悬而未决的提交,它应该在那里。我正在运行“git fsck --unreachable | grep 98d0d”...让我看看我能否找到任何 –

+0

我无法在fsck --unreachable中看到提交ID ...这很奇怪。提交没有在reflog,fsck,fsck --unreachable,branches中显示,但在“git show ”中显示。任何其他建议,找出它? –

3

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

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

+0

很好的答案。我必须想象这几乎肯定是这样。 – Christopher