赞
踩
先说说我的操作步骤
(1)首先git init
仓库,此时HEAD指向master分支,即此时所在分支为master分支,并在此分支下建立一个名为myfolder的文件夹,然后提交。
(2)建立新的分支test,master和test指向同一个commit对象。
(3)在test分支下新建1.txt文件,并且提交
(4)在master分支下新建2.txt,并且提交
(5)在master分支下,合并test分支
(6)在test分支下合并master分支
(7)test 分支下新建3.txt,并且提交
(8)master分支下合并test
(9)查看提交记录git log --graph
红色小框框代表master分支指向commit对象的变化,绿色小框框代表test分支指向commit对象的变化。
(10)分支合并原理
a.
如果 master 分支所在的提交对象是要并入的 test分支的直接上游,Git 只需把master 分支指针直接右移。换句话说,如果顺着一个分支走下去可以到达另一个分支的话,那么 Git 在合并两者时,只会简单地把指针右移,因为这种单线的历史分支不存在任何需要解决的分歧,所以这种合并过程可以称为快进(Fast forward)。
b.
由于当前 master 分支所指向的提交对象(C4)并不是 iss53 分支的直接祖先,Git 不得不进行一些额外处理。就此例而言,Git 会用两个分支的末端(C4 和 C5)以及它们的共同祖先(C2)进行一次简单的三方合并计算。图中用红框标出了 Git 用于合并的三个提交对象,这次,Git 没有简单地把分支指针右移,而是对三方合并后的结果重新做一个新的快照,并自动创建一个指向它的提交对象(C6)(见图 3-17)。这个提交对象比较特殊,它有两个祖先(C4 和 C5)。
以上(4)到(5)的合并就是采用的这个过程。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。