切换到master分支,基于master分支新建br2分支,并提交两次
我们先切回到master分支,然后新建分支br2,先后提交”c4”和”c5”,对应的ID分别是”86ba”和”063f”,这时候HEAD指向br2,br2引用指向”c5”的对应提交063f.git 命令如下:
$ git chechout master
Switched to branch 'master'
$ git checkout -b br2
Switched to a new branch 'br2'
$ echo c4 >> c
$ git add c
$ git commit -m "c4"
[br2 86ba564] c4
1 file changed, 1 insertion(+)
create mode 100644 c
$ git log --oneline
86ba564 c4
973c5dd c1
$ echo c5 >> c
$ git commit -a -m "c5"
[br2 063f6e6] c5
1 file changed, 1 insertion(+)
$ git log --oneline
063f6e6 c5
86ba564 c4
973c5dd c1
|
对应的图如下所示:

切换到master分支,基于master分支创建br3分支,并提交两次
这个操作同分支br2上类似,先从br2分支切换到master分支,然后新建分支br3,分别提交”c6”和”c7”,对应的ID分别是”50f1”和”4f9c”,这时候HEAD指向br3,br2引用指向”c7”的对应提交4f9c,git 命令如下:
$ git chechout master
Switched to branch 'master'
$ git checkout -b br3
Switched to a new branch 'br3'
$ echo c6 >> d
$ git add d
$ git commit -m "c6"
[br3 50f14f6] c6
1 file changed, 1 insertion(+)
create mode 100644 d
$ git log --oneline
50f14f6 c6
973c5dd c1
$ echo c7 >> c
$ git commit -a -m "c7"
[br2 4f9ca79] c7
1 file changed, 1 insertion(+)
$ git log --oneline
4f9ca79 c7
50f14f6 c6
973c5dd c1
|
对应的图如下所示:

切换到master分支,合并br1,br2和br3分支
先切换到master分支,然后合并br1 br2 br3,会新生成一个提交3b03.
$ git checkout master
$ git merge br1 br2 br3
3 files changed, 6 insertions(+)
create mode 100644 b
create mode 100644 c
create mode 100644 d
$ git log --oneline
3b0370b Merge braches 'br1' , 'br2' and 'br3'
4f9ca79 c7
50f14f6 c6
063f6e6 c5
86ba564 c4
4927c6c c3
1c7383c c2
973c5dd c1
|
这时候,运用git log –oneline –graph查看生成的树状图,如下所示.

从上图分析,在第1条红线上的commit顺序是: 3b03→4927→1c73→973c
第2条红线上的commit顺序是:3b03→063f→86ba→973c
第3条黄线上的commit顺序是:3b03→4f9c→50f1→973c
这3条线的从左至右的顺序非常重要,因为HEAD^1对应的就是第1条红线的提交4927,HEAD^2对应的是第2条绿线的063f提
交,HEAD^3对应的是第3条黄线的4f9c提交。3b03没有第4个父提交,因此也没有第4条线,这时候访问HEAD^n(n>3)都会报错。
因此从任何一条线上,我们都可以追溯到”c1”的commit,但是每条线上的中间节点,只能通过这条线上的节点去访问。
操作同上类似,最后的状态如下,这时候HEAD指向master,master引用指向”c8”的对应提交3b03.
对应的图如下所示:

我们再来看看3b03对应节点的父提交,如下图所示:

从图得知,3b03一共有三个父提交,分别是4927,063f,4f9c.
|