1. 2-way merge 和 3-way merge
作者:Lazykid链接:https://www.zhihu.com/question/30200228/answer/866309494
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
Three-way merge 是因为有a b, c三个节点。如果只提供a,b, 就是two-way merge.
Three-way merge的好处是程序能理解你到底做了哪些改动,如果这些改动没有冲突,则它会自动帮你合并。 Two-way merge说白了就是一个diff, 程序永远不能帮你自动merge, 需要人工干预。
举个例子, 假设有一个文本文件,A和B同时做了改动, a,b 节点如下
现在问题来了,merge的结果应该是怎样的? 条件不足,无法判断。
如果现在告诉它们的共同祖先c,进行three-way merge:
通过base/src的对比,我们知道A的改动是删除了3; 通过base/dst的对比,我们知道B的改动是增加了1,所以merge结果是:
类似的,如果原来的c节点是这样的:
则通过base/src对比,我们知道A的操作是删除了1; 通过base/dst的对比,我们知道B的操作是增加了3。则merge的结果应该是:
由此可见,如果只有节点a和b,进行two-way merge,其实是无法确定到底做了什么改动,merge的结果应该是怎样的,必须由用户自己解决。如果有a/b的共同祖先c的信息,three-way merge 能通过对比知道用户做了哪些增删改操作,并尝试自动merge结果.
2. fast-forward merge
标签:改动,git,对比,merge,base,way,类型,节点 From: https://www.cnblogs.com/yinhuachen/p/16725639.html