首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何‘`git日志-所有`错过一个提交点?

如何‘`git日志-所有`错过一个提交点?
EN

Stack Overflow用户
提问于 2017-06-19 20:38:09
回答 2查看 424关注 0票数 2

在一次承诺之后,我被提醒我正处于一种独立的头脑状态。

代码语言:javascript
运行
复制
> git commit -m "Implemented Runrealfast algorithm"
[detached HEAD af46ac9] Implemented Runrealfast algorithm
2 files changed, 18 insertions(+), 1 deletion(-)

我忽略了分离的头和回溯到几个提交点:

代码语言:javascript
运行
复制
> git checkout 87e147e
> git stash -u
> git checkout ed157a3

在沿途运行git stash -u时。

最后,我试图找到我之前做过的提交SHA。

代码语言:javascript
运行
复制
> git log --all | grep Runrealfast
(no output)

但是git log --all并没有展示它。

幸运的是,我的终点站有一个完整的历史。我从终点站的信息中识别出相关的SHA,并运行:

代码语言:javascript
运行
复制
> git checkout af46ac9

问题中的提交没有问题。

git log --all怎么可能错过提交点?分离的头也是悬空的承诺吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-06-19 21:02:40

--all可能错过提交的原因有几个。这听起来可能很奇怪,但问题是--all并不意味着所有提交。

相反,--all的意思是“所有参考文献”。因此,您可以获得当前HEAD提交的(简化)历史,以及每个分支、每个标记、每个远程跟踪分支、由filter-branch创建的每个备份引用、最近的存储以及其他一些零碎部分。(为什么是“简化”?我会再谈那件事。)

但你的承诺不是这些。你问:“一个超脱的头也是一个悬空的承诺吗?”答案是:不..。但就你来说算是吧。

分离的头只是意味着你目前不在任何分支上。你可能正处于悬空之中。或者,您可能处于一个或多个引用历史记录中的提交,但是通过使用远程分支参考名、SHA ID、标记名等签出,而不是使用分支名称来实现。

但是,当然,如果您处于分离的head状态,并且进行了一个新的提交,那么这个新提交从一个悬空的提交开始。

在这种情况下,找到提交的最可靠的方法是查看HEAD的reflog

代码语言:javascript
运行
复制
git reflog

或者,如果您希望输出看起来像git log输出,

代码语言:javascript
运行
复制
git log --reflog

这只能在创建悬空提交的回购(这可能是唯一具有提交功能的回购)内、在提交创建后的合理时间内(重传最终过期)和假设您没有明确损坏提交日志(使用强制重新定位过期的命令,或者破坏.git/logs目录)的假设下进行。

顺便说一句,当我说历史是“简化的”时:有时候git log --all会跳过提交,即使它在引用的历史中。这是因为git确定它可以在每个引用处解释文件的当前状态,而不包括违规提交。有关git意味着什么的详细说明,请参阅git log文档;如果要确保看到每个非悬空提交,则必须添加--full-history--all

票数 2
EN

Stack Overflow用户

发布于 2017-06-19 20:41:01

来自Git文档

--全 假装refs/中的所有引用以及HEAD都在命令行中作为<commit>列出。

来自先前分离的头的提交不是参考 (松散地说,它没有名称),因此没有列出。

请注意,如果您想要回到提交,git reflog可能是一个更方便的帮助,比希望您将通过终端考古学找到它!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44639557

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档