假设我有一个这样的图

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 fsck可以用来找到所有丢失的提交,你只需要正确的选项:

git fsck --unreachable --no-reflogs

——unreachable单独是不够的,因为一些提交可能仍然被reflog引用。如果你需要对整个提交历史有一个非常清晰的视图,你可以创建一个别名,就像这样:

git log --all --decorate --oneline --graph $(git fsck --no-reflogs --unreachable | awk '{if ($2 == "commit") print $3}')

老实说,我不确定在最后一个命令中是否需要——unreachable选项,因为默认情况下git日志遍历祖先(除非指定了——no-walk)。我不敢打赌,但我认为没有必要。

其他回答

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

git log --reflog

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

@bsimmons

git fsck --lost-found | grep commit

然后为每一个创建一个分支:

$ git fsck --lost-found | grep commit
Checking object directories: 100% (256/256), done.
dangling commit 2806a32af04d1bbd7803fb899071fcf247a2b9b0
dangling commit 6d0e49efd0c1a4b5bea1235c6286f0b64c4c8de1
dangling commit 91ca9b2482a96b20dc31d2af4818d69606a229d4

$ git branch  branch_2806a3 2806a3
$ git branch  branch_6d0e49 6d0e49
$ git branch  branch_91ca9b 91ca9b

现在,许多工具将向您显示那些丢失的提交的图形化可视化。

实际上,git fsck可以用来找到所有丢失的提交,你只需要正确的选项:

git fsck --unreachable --no-reflogs

——unreachable单独是不够的,因为一些提交可能仍然被reflog引用。如果你需要对整个提交历史有一个非常清晰的视图,你可以创建一个别名,就像这样:

git log --all --decorate --oneline --graph $(git fsck --no-reflogs --unreachable | awk '{if ($2 == "commit") print $3}')

老实说,我不确定在最后一个命令中是否需要——unreachable选项,因为默认情况下git日志遍历祖先(除非指定了——no-walk)。我不敢打赌,但我认为没有必要。

当我解决这个问题时,我使用以下命令:

git reflog |  awk '{ print $1 }' | xargs gitk

这让我可以可视化最近已经变成无头的提交。

我把这个包在一个名为~/bin/git-reflog-gitk的脚本帮助器中。

编辑:-我的git-reflog-gitk包装是多余的-因为你现在可以直接调用gitk -reflog