在一次承诺之后,我被提醒我正处于一种独立的头脑状态。
> git commit -m "Implemented Runrealfast algorithm"
[detached HEAD af46ac9] Implemented Runrealfast algorithm
2 files changed, 18 insertions(+), 1 deletion(-)我忽略了分离的头和回溯到几个提交点:
> git checkout 87e147e
> git stash -u
> git checkout ed157a3在沿途运行git stash -u时。
最后,我试图找到我之前做过的提交SHA。
> git log --all | grep Runrealfast
(no output)但是git log --all并没有展示它。
幸运的是,我的终点站有一个完整的历史。我从终点站的信息中识别出相关的SHA,并运行:
> git checkout af46ac9问题中的提交没有问题。
git log --all怎么可能错过提交点?分离的头也是悬空的承诺吗?
发布于 2017-06-19 21:02:40
--all可能错过提交的原因有几个。这听起来可能很奇怪,但问题是--all并不意味着所有提交。
相反,--all的意思是“所有参考文献”。因此,您可以获得当前HEAD提交的(简化)历史,以及每个分支、每个标记、每个远程跟踪分支、由filter-branch创建的每个备份引用、最近的存储以及其他一些零碎部分。(为什么是“简化”?我会再谈那件事。)
但你的承诺不是这些。你问:“一个超脱的头也是一个悬空的承诺吗?”答案是:不..。但就你来说算是吧。
分离的头只是意味着你目前不在任何分支上。你可能正处于悬空之中。或者,您可能处于一个或多个引用历史记录中的提交,但是通过使用远程分支参考名、SHA ID、标记名等签出,而不是使用分支名称来实现。
但是,当然,如果您处于分离的head状态,并且进行了一个新的提交,那么这个新提交从一个悬空的提交开始。
在这种情况下,找到提交的最可靠的方法是查看HEAD的reflog
git reflog或者,如果您希望输出看起来像git log输出,
git log --reflog这只能在创建悬空提交的回购(这可能是唯一具有提交功能的回购)内、在提交创建后的合理时间内(重传最终过期)和假设您没有明确损坏提交日志(使用强制重新定位过期的命令,或者破坏.git/logs目录)的假设下进行。
顺便说一句,当我说历史是“简化的”时:有时候git log --all会跳过提交,即使它在引用的历史中。这是因为git确定它可以在每个引用处解释文件的当前状态,而不包括违规提交。有关git意味着什么的详细说明,请参阅git log文档;如果要确保看到每个非悬空提交,则必须添加--full-history和--all。
https://stackoverflow.com/questions/44639557
复制相似问题