⭐ 觉得好用?收藏备用,下次直接打开
原文
新文

文本对比工具 把两段文本(代码、合同、日志、配置)行对行高亮显示新增、删除、修改,支持忽略空白、字符级精细对比、左右分栏/上下统一两种视图。

两种视图模式

  • 行级(line diff) — 按整行比较,速度快,适合代码、长文档
  • 字符级(character/word diff) — 在变化行内进一步定位到字符级,适合短文本和精细审查

主流 diff 算法

算法时间复杂度特点用途
MyersO((N+M)D)经典,差异越少越快Git、GNU diff
PatienceO(N log N)唯一行优先匹配,结果更”人类友好”Git 可选
Histogram类似 Patience,但更快Git 默认(新版)、JGit 默认
LCS(最长公共子序列)O(NM)算法基础,纯算法用教学

与 IDE diff 的区别:IDE diff 集成在编辑器里,能跳到对应行;在线 diff 适合临时对比——同事发来的两版内容、不在仓库里的临时文件、跨语言对比(IDE 有时不识别全部)。

实战提示

  • 对比代码先开”忽略空白” — 否则缩进调整会让结果一片红
  • 中文文本对比留意是否有”中英文标点混用”差异(看似一样的逗号)
  • 大文本(>1MB)建议分段对比,避免浏览器卡顿

📍使用场景

  • 代码 review把两段代码贴入,行级高亮新增/删除/修改,比 IDE 自带 diff 简洁。
  • 文本对比合同/文档两版对比,看清改动了哪些字句、避免漏改。
  • 配置/日志比对同一服务两次输出对比,定位是哪个配置项变了。

常见问题

diff 的"行级"和"字符级"有什么区别?

行级 diff 以整行为单位标记新增/删除/未变(Git diff 默认就是行级),快但粗——同一行只改一个字也会显示"删除整行+新增整行"。字符级 diff 在变化的行内进一步定位到具体字符,更精细但慢,适合短文本(合同条款、配置值)。本工具支持两种切换。

为什么有时同样的两段文本对比结果不同?

三种常见原因——换行符(CRLF vs LF):Windows 复制的文本可能整体不同;空白字符(tab vs 空格、行尾空格):肉眼看不出但 diff 严格区分;编码(UTF-8 vs GBK):中文字节序列不同。多数 diff 工具有"忽略空白"开关,对比代码时可开启。

Myers 算法是什么?为什么 Git 用它?

Myers 算法(1986)是行级 diff 的经典算法,时间复杂度 O((N+M)D),N、M 是两文本行数、D 是差异数量。差异越少越快——这正符合 Git 的常见场景(每次提交只改几行)。Git、`diff` 命令、GitHub PR 视图都用 Myers 或其变体(如 Histogram、Patience)。

三方合并(merge)和两方对比(diff)有什么区别?

diff 是 A 和 B 之间找差异;merge 是 A、B、共同祖先 C 三方合并。Git merge 看 A、B 各自相对 C 改了什么,判断哪些改动可自动合并、哪些是冲突。两方 diff 无法判断"是 A 加了一行还是 B 删了一行",三方 merge 看共同祖先就清楚了。

diff 输出能直接应用到文件吗?

可以——这就是 patch 文件 的用途。`diff -u old new > change.patch` 生成统一格式补丁,`patch < change.patch` 应用回原文件。Git 的 `git apply` 接受同类格式。这是开源邮件列表协作的传统方式(Linux 内核仍用 patch),Web 化后才被 PR 取代。

大文本对比卡顿怎么办?

浏览器 diff 在 5000+ 行或 1MB+ 时性能会下降。优化思路——先按段切(按 `## 二级标题` 或函数定义),每段单独对比;关掉字符级只用行级;Web Worker 异步算(专业 diff 工具常用)。本工具会在超大文本时退化为简化算法保证响应。