假设我有一个这样的图

A---B---C---D (master)
     \
      \-E---F (HEAD)

如果我执行git log -all - online,我将得到所有6次提交。

但如果图像是

A---B---C---D (master, HEAD)
     \
      \-E---F

我不会看到E和f。我能得到git告诉我所有的提交,包括那些没有命名的分支吗?

谢谢


当前回答

git log --reflog

救了我!我在合并头部时丢失了我的,找不到我的lates承诺!没有显示在源树中,但git日志——reflog显示我之前所有的本地提交

其他回答

不是很容易——如果你把指针弄丢了,那就像大海捞针一样。你可以找到所有看起来不再被引用的提交- git fsck -unreachable将为你做这件事-但这将包括你在git提交后扔掉的提交- modify,你重新基于的分支上的旧提交等等。因此,一次查看所有这些提交很可能有太多的信息,难以处理。

所以轻率的回答是,不要忘记你感兴趣的东西。更严重的是,reflogs将默认保存您在过去60天左右使用过的所有提交的引用。更重要的是,它们将提供关于这些提交是什么的上下文。

如果你使用Git Extensions GUI,如果你选择“View -> show reflog references”,它可以显示一个悬浮提交的图形可视化。 这将显示树中的悬空提交,就像所有其他引用的提交一样。这样更容易找到你要找的东西。

请参见此图像进行演示。图像上的提交C2, C3, C4和C5是悬空的,但仍然可见。

通过查看reflog(位于.git/logs/HEAD),我已经幸运地恢复了提交

然后我不得不向下滚动到文件的末尾,我找到了刚刚丢失的提交。

就像@Kieran的回答,但对于主机来说: Git log - online -all -graph - decoration $(Git reflog | awk '{print $1}')

Try:

git log --reflog

它通过假装reflogs (git reflog)提到的所有对象在命令行上被列出为<commit>来列出所有git提交。