0

我正在尝试将少量代码更改从分支文件合并到经过大量修改的主干文件(主要是通过向开关添加案例)。当我尝试合并代码时,我正在从旧文件合并到新文件(从更少的情况到更多的情况)。当我告诉 Visual Studio 从分支合并到主干时,它会删除所有更新的(新)案例,并用分支中添加的案例替换最后一个(新)案例。前任:

树干:

 SWITCH(var){
     CASE(123)
        thing = "bnm"
     BREAK  
     CASE(124)
        thing = "gjh"
     BREAK  
     CASE(125)
        thing = "sdf"
     BREAK  
     CASE(126)
        thing = "asd"
     BREAK  
     CASE(127)
        thing = "qwe"
     BREAK  
}

分支:

 SWITCH(var){
     CASE(123)
        thing = "bnm"
     BREAK  
     CASE(124)
        thing = "gjh"
     BREAK  
     CASE(325)
        thing = "poi"
     BREAK
}

合并结果:

 SWITCH(var){
     CASE(123)
        thing = "bnm"
     BREAK  
     CASE(124)
        thing = "gjh"
     BREAK  
     CASE(325)
        thing = "poi"
     BREAK
}

期望的结果:

 SWITCH(var){
     CASE(123)
        thing = "bnm"
     BREAK  
     CASE(124)
        thing = "gjh"
     BREAK  
     CASE(125)
        thing = "sdf"
     BREAK  
     CASE(126)
        thing = "asd"
     BREAK  
     CASE(127)
        thing = "qwe"
     BREAK  
     CASE(325)
        thing = "poi"
     BREAK
}

我想要发生的是它隔离新案例并将其移动到交换机中。我希望有一种方法可以手动决定如何合并文件,或者有一种方法可以“教”合并工具如何处理大的更改。

在该示例中,不同情况的唯一区别是 case ( CASE(value)) 中的值和分配给 的值thing。此外,从未检测到任何合并冲突。

如果无法微调比较工具,是否还有其他擅长自动合并的工具?

更新:这只是当您进行毫无根据的合并时的问题。如果您不进行毫无根据的合并,则可以正常工作

4

1 回答 1

0

简而言之,如果只有一侧更新,则无法显示合并冲突。

对于您的情况,过程似乎是:首先创建/修改主干文件,然后根据主干文件修改分支文件。

将分支文件合并到主干文件时,TFVC 会比较主干文件和分支文件之间的变化。由于文件只在一侧更新(通过与主干文件比较来更新分支文件),因此它将通过递归合并策略与最新版本(来自分支文件的版本)合并。对于这种情况,没有办法显示合并冲突。

但是由于合并后的文件不会在合并后自动签入,因此您可以将合并后的文件编辑成您需要的内容,然后将合并后的文件签入到源代码管理中。

在此处输入图像描述

或者您可以使用以下解决方法来合并冲突:

从主干文件创建另一个分支(假设 branch2)-> 签入 branch2 的更改-> 将分支文件合并到 branch2 文件中-> 将显示合并冲突-> 然后与您想要的版本合并。

注意:对于 git,它也将使用递归合并策略进行合并,并且不会发生合并冲突。

于 2018-06-14T01:56:25.037 回答