假设我有一个这样的图
A---B---C---D (master)
\
\-E---F (HEAD)
如果我执行git log -all - online,我将得到所有6次提交。
但如果图像是
A---B---C---D (master, HEAD)
\
\-E---F
我不会看到E和f。我能得到git告诉我所有的提交,包括那些没有命名的分支吗?
谢谢
假设我有一个这样的图
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 reflog
在这里你会发现一个历史提交完成的屏幕,就像这样:
在这一点上,你只需要找到你需要的HEAD@{X},创建一个临时分支,并像这样移动到它:
git checkout -b temp_branch HEAD@{X}
这样你就会有一个临时的分支来处理你丢失的提交,而不会重基或者破坏你的git存储库。
希望这对你有所帮助……
其他回答
git log有时候获取所有提交的细节并不好,所以要查看这个…
进入你的git项目,输入:
$ nano .git/logs/HEAD
查看你所有的提交,或者:
$ gedit .git/logs/HEAD
要查看所有的提交,
然后你可以在任何你喜欢的浏览器中编辑。
救了我一命的是下面的命令:
git reflog
在这里你会发现一个历史提交完成的屏幕,就像这样:
在这一点上,你只需要找到你需要的HEAD@{X},创建一个临时分支,并像这样移动到它:
git checkout -b temp_branch HEAD@{X}
这样你就会有一个临时的分支来处理你丢失的提交,而不会重基或者破坏你的git存储库。
希望这对你有所帮助……
当我解决这个问题时,我使用以下命令:
git reflog | awk '{ print $1 }' | xargs gitk
这让我可以可视化最近已经变成无头的提交。
我把这个包在一个名为~/bin/git-reflog-gitk的脚本帮助器中。
编辑:-我的git-reflog-gitk包装是多余的-因为你现在可以直接调用gitk -reflog
实际上,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)。我不敢打赌,但我认为没有必要。
Try:
git log --reflog
它通过假装reflogs (git reflog)提到的所有对象在命令行上被列出为<commit>来列出所有git提交。