你真的会解决代码合并冲突么?

,,先来了解下什么是冲突吧。冲突就是代码字符串str=癮aaa"被同时修改,一个要变成字符串str=癰bbb",一个要变成字符串str=癱ccc",这就在代码合并的时候就带来了冲突。如果代码合并是从主干变基到分支,如果出现冲突,都是以主干为准(以保证已有的功能不受到影响),就会出现主干代码强制覆盖分支的代码。出现冲突后有4个文件(以pom。xml文件为例):

,1.砰的一声。xml,,,,,,,,,,,- - - - - - - - - - - -合并后的文件,如果有冲突会有& lt; & lt; & lt; & lt; & lt; & lt; & lt;冲突提示符

,2. pom.xml.merge-left。r1298,,,- - - - - - - - - - - -主干的前一个版本,也就是计算是否有冲突的根文件

,3. pom.xml。合并——分支,,,,,,- - - - - - - - - - - -本地分支的代码,也就是你要求变基主干的分支代码

,,4. pom.xml.merge——来源。r1313,,,- - - - - - - - - - - -主干的代码

有些人认为解决冲突只要看1中的砰的一声。xml中的冲突提示符就够了。然后对有冲突的地方一一解决就够了。如下图:

,,你真的会解决代码合并冲突么?

,,

,,实际上只是看这个是远远不够的。有这样的一种情况.String str=癮aaa",被同时修改,树干上已经是字符串str=癰bbb";本地分支又被修改为字符串str=癱ccc",另外一个变量字符串str2=癮aaa2",树干上没有变化,只是本地分支被修改为了字符串str2=癱ccc2",这个时候svn会将这个文件视为有冲突,因为str即想变为bbbb又想变为预备,会计算为冲突。但是str2从冲突的定义上来看不是一个冲突,因为只有一个地方修改. svn在代码合并的时候,发现这个文件有冲突会直接用树干的内容覆盖分支的内容,并且将str的地方打上冲突提示符。但是str2的地方就不会打上冲突标识符,因为它不是一个冲突。因此这个文件合并后就是这样的:

,,你真的会解决代码合并冲突么?

,,如果只是按照冲突提示符去合并就会出现本地代码丢失的场景。那么正确的合并冲突解决方法应该是什么呢?应该是根文件(上面提到的pom.xml.merge-left.r1298),分支文件(pom.xml.merge -分支),树干文件(pom.xml.merge -来源。r1313)进行三方比较,比较工具我使用的是无以伦比3。如下图所示:

,,你真的会解决代码合并冲突么?


你真的会解决代码合并冲突么?

,,从上图可以看的出,真正出现冲突的是version1会打上冲突提示符,版本是直接被树干的覆盖。合并后的文件如下图:

,,你真的会解决代码合并冲突么?

,,合并冲突的时候应该对这三个文件进行三方比较,具体操作可以使用上面标红的直接定位。合并的时候一定要清楚那些是需要保留分支的,那些是需要保留主干的。

你真的会解决代码合并冲突么?