Menu

文本对比工具

并排比较两段文本或代码,按行和按词显示差异。

作者 Nethanel Bar, Co-founder & CEO

最后更新

准备好真正学会编程了吗?

Coddy 让你在浏览器里编写真实代码来学习:互动课程、即时反馈,卡住时还有 AI 帮忙。

文本对比工具(diff)是什么?

文本对比工具(diff checker)比较两段文本或代码,并高亮显示新增、删除或修改的内容。开发者每天都在用 diff:审查代码、排查配置改动、比较 API 响应、验证数据迁移,以及在提交前弄清楚自己改了什么。

读懂 diff 是开发者的核心技能。它能把“真正的行为变化”和无害的格式调整区分开,帮你在 200 行代码里找出那一个被改动的字符。一旦熟悉了绿、红、黄的节奏,代码审查就会快很多。

最重要的 diff 有两种:按行对比(哪些行变了)和按词或按字符对比(一行里面什么变了)。好用的对比工具能让你根据比较的是源代码还是段落文字,在两者之间切换。

比较文本时你会学到什么

  • 按行对比告诉你改动发生在“哪里”。按词和按字符对比告诉你一行里面改了“什么”。
  • 空白字符可能很重要(Markdown、YAML、Python),也可能无关紧要(其他大多数代码),请据此开关“忽略空白”选项。
  • 一处看起来很小的差异,如果改的是某个值、条件、路由、环境变量或功能开关,影响可能非常大。
  • 两大段内容差别很大时,先排序或规范化。直接比较两个未排序的 JSON 对象,可能会得到满屏的误报。

一步步比较两段文本

  1. 粘贴两个版本

    把原始文本放在左边,新版本放在右边。代码、JSON、普通文字、配置文件,什么都可以。

  2. 选择按行或按词对比

    源代码或结构化数据用按行对比。比较段落文字、关注措辞时,切换到按词对比。

  3. 设置空白和大小写选项

    如果只关心有意义的改动,开启“忽略空白”;比较日志或大小写无关紧要的文本时,开启“忽略大小写”。

  4. 阅读带颜色的结果

    删除的内容在左侧显示为红色,新增的内容在右侧显示为绿色。修改过的行通常会以一红一绿的形式并排出现。

  5. 反复调整

    编辑任意一侧,diff 会实时更新。在发起合并请求之前,用它整理出一份干净的补丁非常合适。

Diff 颜色和符号速查表

Coddy 文本对比工具使用的约定,git diff、GitHub 和大多数其他 diff 查看器也都这样用。

标记含义出现位置
红色 / -从原始版本中删除的行左侧面板
绿色 / +在新版本中新增的行右侧面板
黄色 / 两侧修改过的行,行内有部分改动两侧面板
无颜色未改动的行,两个版本共有两侧面板
@@ ... @@git diff 的块头(hunk header),表示行号终端中的 git diff 输出
按词对比修改行内的字符或词级改动在黄色行内高亮

可以动手试试的 diff 示例

揪出配置里的笔误

修改前
API_TIMEOUT=3000
修改后
API_TIMEOUT=30000

多一个零,3 秒超时就变成了 30 秒。文本对比工具几秒钟就能发现,而用肉眼比对两个 .env 文件常常会漏掉。

词级修改

修改前

请点击 login 链接。

修改后

请点击 log in 链接。

按词对比只会高亮 login → log in。按行对比只会把整行标为已修改,而按词对比能精确找出实际改动的地方。

比较两个 API 响应

Response A
{  "id": 42,  "status": "draft",  "published": false}
Response B
{  "id": 42,  "status": "published",  "published": true}

diff 一眼就能看出两个相关字段是一起变化的。要验证一个改变状态的 API 调用是否达到了预期,这是最快的方法。

比较一个函数的两个版本

修改前
function total(items) {  let sum = 0;  for (const i of items) sum += i.price;  return sum;}
修改后
function total(items) {  return items.reduce((sum, i) => sum + i.price, 0);}

像这样在线对比代码,是审查重构最快的方式:按行对比会显示命令式循环被删除、reduce 版本被加入,让你在提交前确认行为没有变化。

读懂 git diff

git diff
@@ -1,4 +1,4 @@ function greet(name) {-  return 'Hi ' + name;+  return `Hi ${name}`; }

git diff 用的也是同样的颜色逻辑:以 - 开头的行(红色)是删除的,以 + 开头的行(绿色)是新增的,@@ ... @@ 是显示行范围的块头。把原始的 git diff 输出粘贴进来,就能在带语法高亮的并排面板中阅读。

Diff 的常见错误

  • 在空白字符有意义的时候忽略空白。Markdown、YAML 和 Python 都依赖缩进。
  • 只看绿色(新增)的行,漏掉了重要的红色(删除)行。
  • 以为 diff 干净就说明新版本是对的。diff 只能告诉你“改了什么”,不能告诉你“改得对不对”。
  • 比较压缩过的 JSON 和格式化过的代码时,没有先把其中一份规范化。即使数据相同,每一行看起来也都不一样。
  • 面对很长的文件,只依赖并排对比而不搜索关键字。两者结合使用:先浏览一遍,再用 Ctrl+F 查找你关心的字段。

文本对比工具常见问题

文本比较和 diff 工具有什么区别?

没有区别,它们是同一种工具的两个名字。两者都比较两段文本,并高亮显示新增、删除或修改的内容。

可以用这个工具对比代码吗?

可以。文本对比适用于代码、JSON、SQL、Markdown、YAML、配置文件和普通文本。按行对比视图在审查源代码时尤其有用。

为什么开发者每天都要用 diff?
代码审查、变更追踪、回归排查和事故复盘都离不开 diff。git diff、合并请求页面和 IDE 的对比面板,本质上都是同一回事。
应该忽略空白字符吗?

只有在空白对该文件类型无关紧要时才忽略。在 Python、YAML 和 Markdown 中,空白是有意义的,应该参与比较。在其他大多数代码中,忽略空白能让 diff 更清爽。

我的数据在这个对比工具里安全吗?

安全,比较完全在你的浏览器中进行。你的文本不会被上传或保存。可以放心用于内部代码、配置和客户数据示例。

怎么在线对比代码?

把代码的两个版本分别粘贴到左右两个面板,工具会立即高亮差异:删除的行显示为红色,新增的行显示为绿色,修改行内的词级改动也会标出来。它直接比较文本,所以适用于任何语言(JavaScript、Python、Java、SQL、JSON、YAML)。无需上传,无需注册,比较在你的浏览器中运行。

代码 diff 是什么?
代码 diff 是一个文件两个版本之间的改动集合:哪些行被新增、删除或修改。它是版本控制的基础:每次提交、合并请求和代码审查读的都是 diff。这个工具显示的新增、删除、修改视图和 git diff、GitHub 一样,但可以用于你粘贴的任意两段内容,不需要代码仓库。
能看出两个文件之间的差异吗?

能。打开每个文件,把内容分别复制到对比的两侧,diff 会高亮每一处不同的行。代码和结构化数据用按行对比模式;如果只改了格式、产生了你不关心的干扰,就开启“忽略空白”。

了解更多

其他开发者工具

Coddy 编程语言插图

和 Coddy 一起学编程

开始