什么是三路合并 (3-Way Merge)?
在传统的两路合并中,工具只能告诉你两个文件之间存在差异,但无法判断哪个版本是最新的或正确的。三路合并引入了第三个文件:基础文件 (Base)。它是两个文件在分叉之前的共同祖先。
核心逻辑:
- 我的 (Mine/Local): 你修改后的版本。
- 基础 (Base): 原始的、未修改的共同版本。
- 他们的 (Theirs/Remote): 别人修改后的版本。
WinMerge 通过对比这三个文件,可以自动应用那些只在一方发生的更改,而只在双方都修改了同一行时才提示“冲突”。
WinMerge 三路合并操作步骤
1
启动三路对比
打开 WinMerge,选择“文件”->“打开”。在对话框中勾选“三路比较”选项。依次选择:左侧文件(我的)、中间文件(基础)、右侧文件(他们的)。
2
识别差异颜色
WinMerge 默认使用不同背景色标注差异。绿色通常代表新增,红色代表删除,黄色代表修改。三路模式下,中间的“基础”面板是核心参考。
3
处理非冲突更改
对于只在左侧或只在右侧发生的更改,你可以点击工具栏的“合并”按钮,快速将这些差异同步到最终的目标文件中。
4
手动解决冲突
当左右两侧对同一行进行了不同修改时,WinMerge 会高亮显示冲突。你需要审视基础版本,决定是保留某一方,还是手动在结果中融合两者的代码。
冲突场景示例
我的 (Mine)
function init() {
console.log("Local");
}
基础 (Base)
function init() {
}
他们的 (Theirs)
function init() {
alert("Remote");
}
上图展示了一个典型的冲突:Mine 和 Theirs 都向 Base 添加了不同的代码行。
合并技巧与最新动态
[技巧] 如何在 Git 中将 WinMerge 设置为默认的三路合并工具?
[更新] WinMerge 最新版优化了对大文件合并的内存占用。
[指南] 处理 CSV 数据文件的三路合并最佳实践。