【git】merge 原理

查了一下git merge如何判定冲突,主要是通过找到公共祖先节点,然后两个分支各自形成一个和祖先diff的俩链表,然后逐行处理,如果恰好都改了同一行,那么就冲突。
这就是最基础的3-way合并。3代表了三个文件,使用3-way合并,可以进行一些智能合并。一旦冲突了,就能知道冲突是由一方导致还是双方导致,如果是一方导致,可以直接合并,如果双方导致,就需要人工处理。如果2-way合并,因为不知道不一样是怎么产生的,只能人工处理。
这种merge策略在git里叫resolve,只能用户2heads的合并。如果有不止一个公共祖先,就需要先虚拟merge公共祖先,这可能是一个递归的过程,这就是recursive的merge策略。具体在这一篇里写的很好:
【【git】merge 原理】https://segmentfault.com/a/1190000003966242

    推荐阅读