三向文本差异与合并查看器
指导
三向文本差异与合并查看器
粘贴一个基础版本以及两个分歧版本(A 和 B),工具将使用经典的 diff3 算法生成合并结果。仅一侧发生更改的行将自动合并;两侧均发生不同更改的行将被标记为冲突,您可以通过点击“接受 A”、“接受 B”、“保留基础”或“合并两者”来解决冲突——所有操作均在客户端完成,无需上传。
如何使用
- 将原始(基础)文本粘贴到 基础 框中。这是两个版本共同的祖先起点。
- 将第一个编辑版本粘贴到 版本 A ,并将第二个编辑版本粘贴到 版本 B.
- 选择默认的 冲突策略 (显示标记、优先 A、优先 B 或保留基础)。
- 审查合并结果:绿色边框的 好的 块已自动合并;橙色边框的 冲突 块显示了三方内容,需要做出决策。
- 对于每个冲突,点击 接受 A, 接受 B, 保留基础, 或者 两者相同 以锁定您的选择。使用 清除 撤销。
- 复制或下载生成的 合并文本 完成后点击。
特征
- 真正的三路合并 – 基于最长公共子序列的行匹配识别所有三个输入共享的稳定锚点,并将它们之间的变更分组。
- 按冲突解决 – 每个冲突均以 A、基础和 B 的并排视图呈现,支持一键接受。
- 合并双方 – 当您希望合并两个编辑的联合结果而非选择其一时,选择“两者(A 然后 B)”或“两者(B 然后 A)”。
- 标准冲突标记 – 普通输出使用熟悉的 <<<<<<>>>>>> 标记,以便与 Git 工具链兼容。
- 默认策略 – 设置“优先 A”、“优先 B”或“保留基础”以自动一致地解决所有冲突,无需逐个点击。
- 始终保留在浏览器中 – 无需服务器往返,无需上传;适用于源代码、草稿或任何机密文本。
为什么要使用三路合并?
两路差异只能告诉你两个文本不同——它无法告诉你哪一方有意修改了内容。三路合并引入了一个共享的起点(基础版本),并利用该锚点来判断意图。如果仅一侧修改了某行,合并可以自动采纳该变更。如果两侧在相同区域以不同方式修改了内容,合并会正确地暴露冲突,而不是默默地忽略某一方的工作。
常问问题
-
什么是 diff3 算法?
Diff3 是标准的三路合并算法。它计算基础版本与每个变体之间的最长公共子序列,然后沿着共享锚点遍历,以分类它们之间的区域。仅一侧与基础版本不同的区域将被自动应用;两侧与基础版本的差异不兼容的区域将被识别为冲突。该算法是 Git 经典合并策略和 GNU diff3 工具的基础。
-
基于 LCS 的差异是如何工作的?
最长公共子序列(LCS)是两个输入中以相同顺序出现的最长行序列,允许间隙。标准动态规划表可在 O(m*n) 时间内计算其长度。通过回溯表可获得匹配的行对,所有超出这些对的内容被视为插入或删除。LCS 提供了一组最小且直观的编辑操作,无需精确对齐。
-
为什么有些变更会被自动合并而其他则成为冲突?
在三路合并过程中,算法会比较每个共享锚点之间的间隙,分别来自基础版本与 A、基础版本与 B 以及 A 与 B。如果仅一侧与基础版本不同,则该变更明确无歧义,将被自动采纳。如果两侧对基础版本做出了相同变更,则合并会保留一个副本。只有当两侧对同一区域做出不同变更时,合并才会引发冲突,因为无法同时满足双方的意图。
-
<<<<<<>>>>>> 标记的含义是什么?
这些标记源自 Git 的 diff3 风格冲突格式。位于 <<<<<<>>>>>> 之间的块显示版本 B。看到原始基础版本与两个编辑版本并列,有助于判断应保留哪一方或如何合并。
-
基于行的合并与基于字符或基于单词的合并有何不同?
是的。基于行的合并将每一行视为最小的原子单位,这与源代码、配置文件和大多数纯文本文档的编写方式一致。基于字符或单词的合并可以产生更精细的编辑,但在段落文本中重排内容时容易产生嘈杂且难以解决的冲突。基于行的合并是与 Git 行为相匹配的工具的标准选择。
