赞
踩
我们的日常开发都是多人协作式开发,必然会遇到不同的人在不同的分支上对同一份代码做了改动。
这种情况下,当我们合并这两个分支时,版本管理工具(比如 Git
) 必须考虑如何处理这些改动,应该保留/丢弃哪个分支的哪些改动。
版本管理工具的合并流程分两种:
three-way merge
:三路合并recursive three-way merge
:递归三路合并我们有三个文件 P
, A
, B
,其中:
P 是原始文件,我们把它的内容分成四个部分 X Y Z W
。
A:修改了 Z & W
,Z -> Z1, W -> W1
B:修改了 Y & W
,Y -> Y1, W -> W2
现在我们要合并 A & B。
三路合并的过程:
X
部分在 P, A, B 相同,保留 X
到最终文件Y
部分在 P, A 相同,B 修改成 Y1
,保留 Y1
到最终文件Z
部分在 P, B 相同,A 修改成 Z1
,保留 Z1
到最终文件W
部分在 P, A, B 中均不相同,需要手动处理代码冲突,手动合并代码算法特点:
recursive three-way merge
算法)实现软件
Git
resolve
如果要合并的两个文件有 多个共同祖先,则把这些共同祖先合并成一个文件,然后就可以 三路合并 了。
注意:合并共同祖先为一个文件 本身就是三路合并,如果这些祖先的共同祖先不止一个,又要重复上面的过程;
这是一个递归的过程,这就是 recursive three-way merge
。
Git 提供了多种合并策略:
resolve
: 传统的 three-way merge
recursive
:recursive three-way merge
,当我们 pull
或 merge
时默认这种合并算法。octopus
:合并多于两个分支时默认这种算法Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。