文本 Diff 对比/ 逐行差异
逐行高亮两段文本的差异,支持代码与纯文本,可调节上下文行数,内容不上传服务器。
原文A
修改后B
上下文
Diff
在上方两个面板中粘贴文本。
这个工具有帮到你吗?
什么是文本 Diff 对比工具
文本 Diff 对比工具使用 LCS(最长公共子序列)算法逐行比较两段文本,找出新增、删除和修改的内容。它广泛应用于代码审查、配置文件比对、文档版本对比等场景,是开发者日常工作中不可或缺的工具。
Diff 工具的常见应用场景
代码审查:比较修改前后的代码,快速定位变更。配置文件管理:对比不同环境的配置差异。文档协作:查看文档的修改历史。数据迁移:验证数据转换是否正确。日志分析:比较不同时间点的日志输出差异。
代码示例
JavaScript (jsdiff)
import { diffLines } from 'diff';
const a = 'foo\nbar\nbaz';
const b = 'foo\nqux\nbaz';
diffLines(a, b).forEach(part => {
const sign = part.added ? '+' :
part.removed ? '-' : ' ';
process.stdout.write(sign + part.value);
});Python
import difflib
a = ['foo\n', 'bar\n', 'baz\n']
b = ['foo\n', 'qux\n', 'baz\n']
# Unified diff (like git diff)
diff = difflib.unified_diff(
a, b,
fromfile='original',
tofile='modified',
n=3, # context lines
)
print(''.join(diff))Go
// github.com/sergi/go-diff
import (
dmp "github.com/sergi/go-diff/
diffmatchpatch"
)
d := dmp.New()
diffs := d.DiffMain(textA, textB, false)
patch := d.PatchMake(textA, diffs)
fmt.Println(d.PatchToText(patch))Shell / CLI
# Unified diff with 3 context lines diff -U 3 original.txt modified.txt # Git-style diff (no git repo needed) git diff --no-index \ original.txt modified.txt # Side-by-side view diff --side-by-side \ original.txt modified.txt
常见问题
Diff 对比是什么原理?
本工具使用 LCS(最长公共子序列)算法对两段文本进行逐行比较,找出最优的增删方案——即改动行数最少的对比结果,与 git diff 使用的算法类似。
上下文行数有什么作用?
上下文行数控制在每处差异周围显示多少行未改动的内容。设为 0 只显示差异行;设为 3 会在变更前后各显示 3 行;设为「全部」则显示完整文本。
支持哪些类型的文本?
支持任意纯文本,包括代码(JavaScript、Python、Go 等)、配置文件(JSON、YAML、TOML)、Markdown 文档、日志文件等。对比基于行,每行作为整体进行比较。
我的内容会上传到服务器吗?
不会。所有处理完全在浏览器本地完成,内容不会离开你的设备,适合对比敏感代码或配置信息。
如何复制对比结果?
点击差异区右上角的「复制」按钮,可将统一格式的 Diff 文本复制到剪贴板,格式与 git diff 输出兼容(+ 表示新增行,- 表示删除行,空格表示未变行)。
交换按钮有什么用?
点击「交换 A↔B」可快速对调原文和修改后文本,方便从另一个方向审视差异,或撤销对比方向。