git - 当使用 git log --graph 我的提交在不同的分支上丢失
问题描述
我的提交历史应该是这样的:
当我结帐时master
,我将其作为我的提交历史记录:
请注意,我在master
分支中,而不是heading-update
我应该在的分支中。如果我检查heading-update
分支并运行 git log --oneline --graph
,我会得到以下输出:
现在我在正确的分支中,但我错过了c26ae66
master 上的最后一次提交,如上图所示。我很困惑为什么会这样。
解决方案
git log
从你告诉它开始的提交开始,然后向后工作。
尖端的提交master
是c26ae66
. 它的父级——它的前一个提交,历史上的一个倒退——是c774c8c
. 这是一个合并提交,因此它有两个直接父级:7e344d8
作为它的第一个父级,7856b65
作为它的第二个父级。(git log --graph
以向下和向右的方向绘制第二个父级,第一个父级向下但笔直地绘制,以便您可以区分它们。其他图形绘制程序可能会或可能不会这样做。)这两个提交中的每一个有一个父母,依此类推。
请注意,7e344d8
它也在 branch 上footer
——事实上,它是的提示提交footer
——并且7856b65
也在分支上,并且是分支的提示提交sidebar
。同时c774c8c
也在分支上heading-update
,是那个分支的尖端。因此,此处显示的最后一次提交73b229f Initial commit
, 位于所有这些分支上。在 Git 中,像这样在多个分支上提交是很正常的。
当你git checkout master
在git log
不告诉它从哪个提交开始的情况下运行时,它从c26ae66
- 由名称标识的提交master
- 在它遍历图形时开始,一次一个提交,从子级向后移动到父级。这在合并时变得很棘手,因为它必须访问合并的两个分支,但这就是它的作用。这c26ae66
首先显示,然后c774c8c
。(然后以某种顺序显示两个父母:究竟是什么顺序,嗯,这是另一个棘手的问题......)
当您git checkout heading-update
在git log
不告诉它从哪个提交开始的情况下运行时,它从 commit 开始c774c8c
:由 . 标识的提交heading-update
。然后它从孩子向后移动到父母,一次提交一个。这永远不会访问提交c26ae66
,因为这需要前进,而 Git 的内部箭头都指向后退。
所以这一切都很正常。如果您想git log
从其他一些提交开始,请在命令行上命名它们:
git log [options] master heading-update footer sidebar
例如,或者:
git log [options] --branches
或者:
git log [options] --all
和选项分别表示所有分支--branches
和所有参考。 Refs或references是一个通用术语,包括分支名称,如—really,— 和标签名称,如which is really ,以及许多其他类型的名称。--all
master
refs/heads/master
v1.2
refs/tags/v1.2
(该--branches
选项可以采用 glob 样式的模式,例如--branches="feature/*"
. 您可能需要也可能不需要在*
命令行解释器中引用
推荐阅读
- python - Python selenium webdriver 等待时间比它应该的要长
- java - 无法在 JAVA 上连接到 SMTP GMAIL(连接超时错误)
- python - 无法初始化 peewee 的内存数据库
- javascript - 提交时关闭模式
- python - Pandas DataFrame:如何将数字列转换为成对分类数据?
- android - 已删除的权限仍显示在 Play 控制台中
- c++builder - bcc64.exe 如何存储调试信息?
- powershell - 使用批处理脚本触发 powershell 脚本
- sql - SQL:当它是敏感数据时改变默认选择顺序(不带 ORDER BY 子句)
- ruby-on-rails - 下拉列表未显示导轨