首页 > 解决方案 > 当使用 git log --graph 我的提交在不同的分支上丢失

问题描述

我的提交历史应该是这样的:

在此处输入图像描述

当我结帐时master,我将其作为我的提交历史记录:

在此处输入图像描述

请注意,我在master分支中,而不是heading-update我应该在的分支中。如果我检查heading-update分支并运行 git log --oneline --graph,我会得到以下输出:

在此处输入图像描述

现在我在正确的分支中,但我错过了c26ae66master 上的最后一次提交,如上图所示。我很困惑为什么会这样。

标签: git

解决方案


git log从你告诉它开始的提交开始,然后向后工作。

尖端的提交masterc26ae66. 它的父级——它的前一个提交,历史上的一个倒退——是c774c8c. 这是一个合并提交,因此它有两个直接父级:7e344d8作为它的第一个父级,7856b65作为它的第二个父级。(git log --graph以向下和向右的方向绘制第二个父级,第一个父级向下但笔直地绘制,以便您可以区分它们。其他图形绘制程序可能会或可能不会这样做。)这两个提交中的每一个有一个父母,依此类推。

请注意,7e344d8它也在 branch 上footer——事实上,它是的提示提交footer——并且7856b65也在分支上,并且是分支的提示提交sidebar。同时c774c8c也在分支上heading-update,是那个分支的尖端。因此,此处显示的最后一次提交73b229f Initial commit, 位于所有这些分支上。在 Git 中,像这样在多个分支上提交是很正常的。

当你git checkout mastergit log不告诉它从哪个提交开始的情况下运行时,它从c26ae66- 由名称标识的提交master- 在它遍历图形时开始,一次一个提交,从子级向后移动到父级。这在合并时变得很棘手,因为它必须访问合并的两个分支,但这就是它的作用。这c26ae66首先显示,然后c774c8c。(然后以某种顺序显示两个父母:究竟是什么顺序,嗯,这是另一个棘手的问题......)

当您git checkout heading-updategit 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所有参考Refsreferences是一个通用术语,包括分支名称,如—really,— 和标签名称,如which is really ,以及许多其他类型的名称。--allmasterrefs/heads/masterv1.2refs/tags/v1.2

(该--branches选项可以采用 glob 样式的模式,例如--branches="feature/*". 您可能需要也可能不需要在*命令行解释器中引用


推荐阅读