背景
从节点P引申出两条分支,分别为分支A和分支B;
分支A和分支B的关系是部分相同,部分不同;
合并(merge)
顾名思义,分支A和分支B是从节点P分叉出来的,合并之后分支A和分支B会在一个新的节点后会和;假设合并的这个节点是D;
变基(rebase)
变基涉及两个名词,一个是分支(branch),一个是上游(up stream);
一开始我对变基的理解是:把分支A中所有节点(除节点P及P之前的节点)加在分支B上面;看起来就像是从节点P开始,先开发了分支B,然后在分支B的基础上开发了分支A;
如此一来,分支A和分支B的关系变成了分支A包含了分支B;
这种情况下的分支B叫上游(up stream);
后来我对变基的理解变成了:从节点P开始,把分支A中各个节点按提交的顺序加在分支B的上面;因为一个节点对应一次内容改变,所以分支A中不想要的改变可以在变基的过程中跳过相应的节点;
区别与优缺点
在较大的工程中,变基一般都会出现冲突,这个时候需要在冲突的地方进行仲裁:
- 决定采用分支A的写法;
- 决定采用分支B的写法;
- 兼容两边的写法;
上述3个方法中,除了方法1不会改变分支A的内容,后两种方法会对分支A进行改变;就是说变基后的分支A变化了,跟变基前的分支会不一样;
所以如果变基失败了,分支A也就废了,因此在变基之前先对分支A做一次备份;
而合并的时候发生冲突,仲裁后两条分支都不会发生改变,既是说不会无论是分支A和分支B都会保留节点D之前的内容;但在复杂的工程中,随意的合并分支,个人觉得会显得分支比较杂乱;