使用git log时--在不同的分支上缺少我的提交

使用git log时--在不同的分支上缺少我的提交,git,Git,我的提交历史应该如下所示: 当我签出master时,我会将其作为我的提交历史记录: 请注意,我在master分支中,而不是我应该在的headingupdate分支中。如果我签出标题更新分支并运行gitlog--oneline--graph我会得到以下输出: 现在我在右边的分支中,但是我错过了主控上的最后一次提交c26ae66,如上图所示。我很困惑这是为什么。git log的工作原理是从您告诉它的提交开始,然后向后工作 master顶端的提交是c26ae66。它的父级是它的前一个commit

我的提交历史应该如下所示:

当我签出
master
时,我会将其作为我的提交历史记录:

请注意,我在
master
分支中,而不是我应该在的
headingupdate
分支中。如果我签出
标题更新
分支并运行git
log--oneline--graph
我会得到以下输出:


现在我在右边的分支中,但是我错过了主控上的最后一次提交
c26ae66
,如上图所示。我很困惑这是为什么。

git log
的工作原理是从您告诉它的提交开始,然后向后工作

master
顶端的提交是
c26ae66
。它的父级是它的前一个commit,历史上后退一步是
c774c8c
。这是一个合并提交,因此它有两个直接父级:
7e344d8
作为它的第一个父级,而
7856b65
作为它的第二个父级。(
git log--graph
沿向下和向右的方向绘制第二个父对象,第一个父对象向下但笔直绘制,以便您可以区分它们。其他图形绘制程序可能会也可能不会这样做。)这两个提交中的每一个都有一个父对象,依此类推

请注意,
7e344d8
也在分支
页脚上
——事实上,它是
页脚
的提示提交,
7856b65
也在,并且是分支
侧栏
的提示提交。同时,
c774c8c
也在分支
标题更新中,是该分支的尖端。因此,此处显示的最后一次提交,
73b229f Initial commit
,位于所有这些分支上。在Git中,提交位于多个分支上是很正常的

当您
git checkout master
并运行
git log
而不告诉它从哪个提交开始时,它从
c26ae66
开始—由名称
master
标识的提交—当它遍历图形时,一次提交一次,从子级向后移动到父级。这在合并时变得很棘手,因为它必须访问合并的两个分支,但它就是这样做的。首先显示
c26ae66
,然后显示
c774c8c
。(然后以某种顺序向父母展示:确切的顺序是什么,这是另一个棘手的问题……)

当您
git checkout heading update
并运行
git log
而不告诉它从哪个提交开始时,它从commit
c774c8c
开始:由
heading update
标识的提交。然后,它从子级向后移动到父级,一次提交一个。这永远不会访问commit
c26ae66
,因为这需要向前,Git的内部箭头都指向后面

所以这一切都很正常。如果希望从其他提交开始,请在命令行中命名它们:

git log [options] master heading-update footer sidebar
例如,或:

git log [options] --branches
或:

--branchs
--all
选项分别表示所有分支和所有引用。Refs或references是一个通用术语,它包含分支名称,如
master
,实际上是
Refs/heads/master
,以及标记名称,如
v1.2
,实际上是
Refs/tags/v1.2
,以及许多其他类型的名称

--branchs
选项可以采用全局样式的模式,例如
--branchs=“feature/*”
。您可能需要也可能不需要在命令行解释器中引用
*
,这取决于您使用的shell以及在该shell具有配置选项时设置的各种shell配置选项。)

git log [options] --all