提交后,我会提醒我处于分离的 HEAD 状态。
> git commit -m "Implemented Runrealfast algorithm"
[detached HEAD af46ac9] Implemented Runrealfast algorithm
2 files changed, 18 insertions(+), 1 deletion(-)
我忽略分离的 HEAD 并回溯到几个提交点:
> git checkout 87e147e
> git stash -u
> git checkout ed157a3
运行时git stash -u
一路上。
最终我尝试找到我之前所做的提交 SHA
> git log --all | grep Runrealfast
(no output)
but git log --all
不显示它。
幸运的是,我的终端有完整的历史记录。我从终端的消息中识别出相关的 SHA 并运行:
> git checkout af46ac9
并且有问题的提交显示没有问题。
How can git log --all
错过提交点?分离的 HEAD 也是悬空提交吗?
有几个原因--all
可能会错过一次提交。这听起来可能很奇怪,但事实是--all
并不意味着所有提交.
Rather --all
意思是“所有参考文献”。这样你就可以得到当前的(简化的)历史记录HEAD
提交,加上每个分支、每个标签、每个远程跟踪分支、创建的每个备份引用filter-branch
、最新的藏品,也许还有其他一些零碎的东西。 (为什么要“简化”?我会回过头来讨论这个问题。)
但你的承诺不是这些。你问:“分离的 HEAD 也是悬空的提交吗?”答案是:No...但就你而言,有点。
分离头仅意味着您当前不在任何分支上。你可能处于悬而未决的承诺中。或者,您可能正在进行一个或多个引用历史记录中的提交,但通过使用远程分支引用名称、SHA ID、标签名称等(而不是分支名称)进行签出来实现这一点。
但当然,如果您处于分离的头部状态并且进行了新的提交,则该新的提交将以悬空提交开始。
在这种情况下,找到提交的最可靠方法是查看引用日志HEAD
git reflog
或者,如果您希望输出看起来像git log
output,
git log --reflog
这只能在创建悬空提交的存储库中进行计算(这可能是唯一具有该提交的存储库),在创建提交后的合理时间内(引用日志最终过期),并且假设您没有明确损坏提交日志(使用强制引用日志过期的命令,或者通过弄乱.git/logs
目录)。
顺便说一句,当我说历史被“简化”时:有时git log --all
即使它会跳过提交is在裁判的历史上。这是因为 git 确定它可以解释每个引用处文件的当前状态,而不包括有问题的提交。有关 git 含义的详细解释,请参阅git log
文档;如果你想确保看到每个非悬空提交,你必须添加--full-history
也--all
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)