文本与代码在线对比工具 (Text Diff)

基于 Myers 差分算法,支持双列并排与单列逐行对比。精确高亮增、删、改差异字符,支持忽略空格缩进与大小写。纯浏览器本地比对,代码与敏感配置零泄露。

纯本地比对 · 敏感数据零上传
开发者特惠 阿里云官方合作专区

阿里云爆款云服务器 · 开发者上云特惠 99元/年起

2核2G/2核4G 高性能轻量服务器、OSS 对象存储与云数据库限时特价,专属通道直达优惠。

对比粒度:
展示布局:
快速范例:
+0 处新增 -0 处删除
原版本文本 (Original / Before)0 字符
修改后版本 (Modified / After)0 字符

差异高亮对比视图 (Diff Output)

左右分栏视图
旧版本(红色为已移除内容):
新版本(绿色为新增内容):

Git Diff 常用指令速查与参数对照

日常开发与 Code Review 中高频使用的 Git 差异比对命令行操作。

Git 常用命令比对范围与职责核心可选参数与技巧
git diff比对工作区(Working Tree)与暂存区(Index)的改动直接查看尚未 git add 的本地修改代码
git diff --cached比对暂存区(Staged)与最新提交(HEAD)的差异提交前最终检查已 git add 的内容
git diff branchA..branchB比对两个分支尖端(Tips)之间的代码变动创建 Pull Request (PR) 前核对分支落后或超前差异
git diff -w / --ignore-all-space比对时忽略所有空格与 Tab 缩进改动排查因 Prettier/ESLint 代码格式化造成的大量虚假冲突
git diff --stat仅显示文件变更统计摘要(增删行数总览)大版本重构后快速查看影响的文件清单与量级

常见编程语言文本比对实现代码速查

Python、Node.js、Go 与 Java 进行字符串与文件行比对的标准示例。

Python (difflib)标准库
import difflib

text1 = "apple\nbanana\norange"
text2 = "apple\nblackberry\norange"

# 产生标准 Unified 格式 Diff
diff = difflib.unified_diff(
    text1.splitlines(), text2.splitlines(), lineterm=""
)
print("\n".join(diff))
Node.js / JS (diff)npm
const Diff = require('diff');

const diff = Diff.diffLines("旧文本内容", "新文本内容");
diff.forEach(part => {
  const color = part.added ? '绿色' : part.removed ? '红色' : '普通';
  console.log(`[${color}] ${part.value}`);
});
Golang (sergi/go-diff)go get
import "github.com/sergi/go-diff/diffmatchpatch"

dmp := diffmatchpatch.New()
diffs := dmp.DiffMain("old string", "new string", false)
html := dmp.DiffPrettyHtml(diffs)
Java (java-diff-utils)Maven
Patch<String> patch = DiffUtils.diff(listA, listB);
for (AbstractDelta<String> delta : patch.getDeltas()) {
    System.out.println(delta);
}

文本差分算法与 Diff 常见技术问答 (FAQ)

深入了解 Myers 最长公共子序列原理与冲突合并排查。

Q1: 文本比对工具(以及 Git)底层使用的是什么算法?

几乎所有现代 Diff 工具和版本控制系统(包括 Git、Linux diff 命令、VS Code)底层核心都基于 Eugene Myers 算法 (Myers' Diff Algorithm)。该算法将两段文本的比较建模为一个有向图上的**“最短编辑距离 (Shortest Edit Distance)”**与**“最长公共子序列 (LCS)”**问题,能在 \( O((M+N)D) \) 的时间复杂度内计算出从旧文本转换至新文本所需的最少增删步数,产出最直观符合人类阅读直觉的对比结果。

Q2: 为什么很多时候代码没有实质改动,Diff 却显示整整几十行都被修改了?

最普遍的原因是换行符 (Line Endings) 或 缩进格式化的隐式改动:
• CRLF vs LF:Windows 平台默认换行符为 \r\n,而 Linux/macOS 为 \n。如果项目成员的 Git 未配置 autocrlf,会导致文件虽然字面一模一样,但每一行的末尾字节都被重写;
• Tab vs Spaces:有人使用 4 个空格缩进,有人使用 Tab。勾选本工具顶部的“忽略空白缩进”即可滤除这类排版干扰。

Q3: 在此工具中比对内部机密代码或商业配置,数据会上传吗?

绝对不会。AIJSON.TOP 秉承 100% 浏览器客户端本地计算原则。对比算法完全在您的前端浏览器 JavaScript 进程内存中执行,没有任何 HTTP 接口上传请求,即使在断网离线状态下也能正常运行,您可以放心比对核心源码、JWT 密钥或生产数据库配置。