原始版本(版本 A)
修改版本(版本 B)

Git Diff 在线工具:在浏览器中比较两个版本的代码

将版本 A 粘贴到左侧,版本 B 粘贴到右侧,精确查看变更内容。无需 git clone,无需 IDE,无需注册,完全在浏览器中运行。

这个在线 git diff 工具是什么

一个免费的浏览器工具,无需打开 Git、GitHub 或 IDE 即可比较两个版本的代码。将旧版本粘贴到左侧,新版本粘贴到右侧,差异会逐字符高亮显示。文本不会离开您的计算机,这对于来自私有 repo 或未合并 branch 的代码片段尤为重要。

它专为同事在 Slack 中发来两个版本的函数并询问"改了什么?"这种情况而设计。为了 12 行代码的 diff 而启动本地 checkout 太浪费了。如果还没有合并请求,打开 GitHub 的合并请求视图也没意义。两个文本面板,一个 diff,十五秒搞定。

这不能替代在真实工作树上运行的 git diff。它无法暂存代码块、应用 patch 或运行 blame。它能做的是您最常需要的那部分:获取两段任意文本,显示它们之间的编辑内容。底层 diff 引擎与我们的 compare-text 工具相同,只是针对代码审查场景进行了封装。

diff 的实际工作原理

diff 逐字符运行,然后经过语义清理阶段将变更重新归组为可读的块,使高亮落在被重命名的标识符上,而不是每个单独的字母。右侧面板的插入内容显示为绿色,左侧面板的删除内容显示为红色。两个面板会同步滚动,当您在一侧找到第 80 行的变更时,另一侧也会跟随跳转。

为什么使用字符级别而不是行级别?因为对于短代码片段,仅看行级别太粗糙了。将单个变量从 id重命名为 userId 是一个标识符的变更;行级 diff 会将整行显示为已删除并插入全新的一行,这在技术上是正确的,但让实际编辑更难发现。字符模式加上语义清理会高亮被重命名的标记,并保持该行其余部分不变。对于长文件,这种权衡会翻转,这就是为什么 经典的基于行的 diff 是 Git 默认使用的方式。两者各有其用。这个工具提供适合代码片段的视图。

该工具有意不做的事:它不感知语法。它不解析 JavaScript、Python 或 Java。语义相同但格式不同的块仍会显示为 diff,因为对于文本比较器来说它们是不同的文本。如果您需要对结构化数据进行格式感知的 diff,我们的 compare-json 页面支持 JSON,compare-yaml 支持 YAML,compare-xml 支持 XML 和 POM 文件。对于原始源代码,文本 diff 加上您自己的眼睛通常比为一次性片段配置语法感知工具更快。

三步比较代码

两个文本面板,一个 diff。无需登录,无需上传,无需解析 patch 格式。

  1. 1

    将版本 A 粘贴到左侧

    从编辑器、终端或其他地方复制函数、文件或代码片段的旧版本。按 Ctrl+C 然后粘贴到左侧面板。如果您是从 git show <commit> 获取的,请复制文件正文而非 patch 头,这样 diff 只会高亮实际的代码变更。

  2. 2

    将版本 B 粘贴到右侧

    对新版本执行同样的操作。如果同事将其粘贴在 Slack、Teams 或邮件中,可直接从那里复制。粘贴时会保留空白和缩进,这对于 Python 和 YAML 等缩进有意义的语言很重要。如果两个代码片段的缩进方式不一致(Tab 与空格),会显示为差异。

  3. 3

    查看高亮的差异

    左侧的删除内容显示为红色删除线,右侧的插入内容显示为绿色。每个标题栏中的变更计数器会告诉您检测到多少个不同的编辑。浏览高亮部分,优先关注逻辑变更(控制流、条件判断、错误处理),将纯粹的重命名或格式变更视为代码审查时的较低优先级。

在线代码 diff 的适用场景

审查同事在 Slack 中粘贴的函数

有人在聊天中发来两段代码并询问哪个是对的。为了 20 行代码片段而克隆 repo、切换 branch 并打开 IDE 纯属浪费精力。将两段代码粘贴到 diff 工具中,下一条消息到来之前您就有了答案。这是人们使用在线 diff 最常见的原因。

比较构建脚本的两个版本

CI 流水线、Dockerfile、package.json 和 GitHub Actions workflow YAML 持续演变。队友在某个 branch 上编辑了 .github/workflows/ci.yml,构建失败了,而您想在不 checkout 他们的 branch 的情况下查看具体改了什么。将 main branch 的版本和出问题的 branch 版本并排粘贴,几秒内就能找到问题所在。对于 workflow 文件,我们的 YAML diff 页面 能更干净地处理缩进边界情况。

向非工程师展示合并请求中的变更

产品经理、设计师和客户经理有时需要了解代码变更的内容,却不想读 Git 界面。GitHub 的合并请求视图假设用户熟悉 diff 语法、文件树和审查评论。将变更前后的代码粘贴到简洁的两面板视图中,然后一起浏览高亮部分,友好得多。在故障复盘时,如果参与者包括工程团队以外的人员,这同样很有用。

比较两个提交的 git show 输出

您有某个文件的 git show abc123 输出和 git show def456 输出,可能来自 CI 日志或一个无法方便运行 git 命令的远程沙箱。去掉 patch 头,粘贴两个文件内容,执行 diff。当您在服务器上调试、读取构建产物或审查引用了两个特定提交文件内容的安全公告时,这种方式非常有效。

审查来自邮件或 PDF 的代码

供应商在 PDF 中发来示例集成代码。监管机构通过邮件发送一段策略代码。顾问附上了您脚本的修补版本。这些都不是可以克隆的 repo。从 PDF 或邮件中复制文本,粘贴到您当前版本旁边,不到一分钟就有了可用的审查界面。注意 PDF 复制粘贴可能带来的格式噪音;换行符和引号字符是常见的问题。

值得了解的代码 diff 边界情况

纯文本 diff 与 Git、IDE 或代码审查工具显示结果不同的情况。在粘贴生产代码前先浏览一下,避免对假阳性结果感到困惑。

TopicWhat this tool does
行尾(CRLF 与 LF)Windows 风格的 CRLF 和 Unix 风格的 LF 是不同的字节。从 Windows 编辑器粘贴的文件和从 Linux 容器粘贴的文件,如果行尾不一致,即使可见文本完全相同,也会显示为整个文件的 diff。Git 通过 core.autocrlf 来规范化这一点;本工具不做此处理。
尾随空白行尾的空格或 Tab 会显示为差异。Git 的 core.whitespace 可以在提交时发出警告或自动修复;在这里,您粘贴什么就比较什么。如果代码审查的噪音中充满了尾随空白的编辑,请在 diff 之前在编辑器中去除它们。
二进制文件本工具仅支持文本。粘贴二进制文件的内容(PNG、编译后的 JAR、sqlite 数据库)会产生乱码或卡住标签页。对于二进制 diff,Git 显示"Binary files differ"而非 patch;您需要特定格式的工具来处理实际内容。
.gitattributes 文本与二进制标记repo 的 .gitattributes 可以按文件模式覆盖 Git 的文本与二进制检测。该设置不会随复制粘贴一起传递。如果您怀疑某个文件在两个 checkout 之间被区别对待,那个文件就是需要查看的地方;本工具无论如何都会将其作为纯文本进行 diff。
字符 diff 与行 diff本页使用带语义清理的字符级 diff。Git 默认使用行级,可选 git diff --word-diff 进行词级处理。字符级最适合单个标记发生变化的短代码片段;行级最适合整行大量变更的长文件。
git diff --word-diffGit 的 --word-diff 模式高亮行内的词级变更,与本工具对代码片段的处理方式更接近。输出格式不同(终端友好的标记与并排面板),但意图有重叠。如果您习惯在终端工作,--word-diff 就是本地等效命令。
大文件阈值基于浏览器的 diff 对每侧数千行的内容响应灵敏。超过这个范围后,语义清理会变慢,渲染后的 DOM 也会变重。对于超大文件,请在本地运行 git diff 并通过分页器查看,或将比较内容分成较小的段落。
编码(仅支持 UTF-8)diff 假定输入为 UTF-8,这几乎覆盖了 2026 年所有的源代码。以 UTF-16、Windows-1252 或 Shift-JIS 保存的文件,粘贴时可能因浏览器不同而显示为乱码。如果代码片段看起来很混乱,请在复制之前将源文件重新保存为 UTF-8。

在线 git diff:常见问题

这与在本地运行 git diff 有何不同?

本地的 git diff 在真实仓库中比较两个引用(提交、branch、工作树)。它了解您的索引、工作树和历史记录。这个在线工具不涉及这些,它只比较您粘贴的两段任意文本。在已 checkout 的 repo 上进行真正的代码审查时,请使用 git diff。当您有两段代码片段却没有方便的方式将其放入工作树时,或者当您想要一个不需要切换上下文的并排视图时,请使用此工具。

它与 GitHub 或 GitLab 在合并请求中显示的内容匹配吗?

不完全是。GitHub 和 GitLab 使用带文件上下文、块头和每文件摘要的基于行的统一 diff。本工具使用字符级 diff 加语义清理,对于短代码片段更好,但对于跨多处变更的整个文件比较效果较差。进行真正的合并请求代码审查时,请使用 GitHub 合并请求视图。在合并请求之外快速比较代码片段时,这里更快,而且无需导航到正确的 repo。

它能理解 JavaScript、Python 等语言的语法吗?

不能。这是纯文本 diff。它不解析语言,因此无法识别出一个被重命名的变量在 12 个地方都是同一个标识符,也无法像语法感知 diff 那样忽略重新格式化的空白。对于大多数代码片段的审查,这没问题,因为您会用自己的大脑读取高亮内容。如果您需要真正的代码语义 diff,您的 IDE(VS Code、IntelliJ)或基于 tree-sitter 的 diff 才是合适的工具。本页针对速度优化,而非深度解析。

这与 diff -u 统一格式相比如何?

经典的 Unix diff -u 命令生成 统一格式 patch(Git 内部使用的格式)。它基于行,设计为机器可读,以便在其他地方应用 patch。本工具面向人类可读。它显示两个并排面板,带内联高亮,而不是单列的加减号行。它不会生成可用 git applypatch -p1 应用的 patch 文件。如果需要生成 patch,请使用命令行。如果需要阅读 diff,这里更友好。

它能处理行尾和尾随空白吗?

能,但有其自身的处理方式。如果两个粘贴的代码片段的行尾不一致,CRLF(Windows)和 LF(Unix)的行尾会显示为差异,因为它们在技术上是不同的字节。尾随空白同理。这与 core.autocrlf 关闭时 Git 处理文件的方式一致。如果您只关心逻辑变更而不关心空白,请在粘贴前修剪每个面板中的内容。我们目前没有提供"忽略空白"的开关,但它在路线图上;git diff -w 是本地等效命令。

有大小限制吗?

实际上有。diff 在您的浏览器中运行,因此非常大的输入(比如整个 vendor 库或 50000 行的生成文件)会让页面变慢或卡住标签页,具体取决于您的浏览器有多少内存。对于典型的代码审查工作(函数、文件、构建脚本、每侧最多几千行的配置),diff 几乎瞬间完成。如果您需要比较整个仓库,真正的 Git 工具或文件夹比较工具才是正确答案;本页专为代码片段和单个文件而构建。

我可以粘贴统一 diff 或 .patch 文件并在这里阅读吗?

不能按您期望的方式工作。本工具对您粘贴的两个完整版本(每个面板各一个)进行 diff 并自行计算变更。它不接受已有的 .patchgit diff 输出并将其渲染为并排视图。如果您将统一 diff 粘贴到某个面板,您只是在将那段 patch 文本与另一个面板中的内容进行 diff,这通常不是您想要的。要在此处阅读 patch,请重建两个文件版本(变更前和变更后)并粘贴它们。生成或应用 patch 仍然是命令行上的 git applypatch -p1 的工作。

粘贴专有代码或客户代码安全吗?

安全。diff 完全在您的浏览器中运行;代码永远不会被上传、记录或发送到任何服务器。这正是它存在的原因,而不是使用云 diff 服务。将未发布的功能、安全补丁或来自私有 repo 的文件粘贴到服务器端工具中,本身就可能违反您公司的数据处理政策或保密协议。这里没有此类风险。想确认?打开 DevTools,在粘贴两侧内容时查看 Network 标签页,您会看到没有任何出站请求。

免费吗?需要注册吗?

免费,无需创建账户。没有试用计时器,没有席位限制,没有邮件门槛。粘贴版本 A,粘贴版本 B,阅读 diff,关闭标签页。首次访问即可使用所有功能,无需登录。这是一个单一用途的工具,而非免费增值漏斗,所以没有隐藏功能的付费层,也没有在几次 diff 后催促您升级的提示。

能同时比较两个以上的版本或 branch 吗?

不能在一个视图中完成。该工具围绕两个面板构建,因此一次只能比较两个版本。对于三方情况,比如 main 上的函数、功能 branch 上的函数和同事 Slack 粘贴的函数,可以运行两次:main 与 branch 对比,然后 branch 与粘贴内容对比。依次阅读两个清晰的 diff 比盯着三列内容要好得多。真正的多路或 branch 感知比较,需要在已 checkout 的 repo 上使用 git,而不是粘贴工具。

它能离线使用吗?在手机上可以用吗?

都可以。diff 是纯客户端 JavaScript,没有任何服务器调用,所以一旦页面加载完成,您可以断开连接,它仍然可以工作,这对于网络受限的构建机器或不稳定的 VPN 环境很方便。在手机上,两个面板会垂直堆叠,支持双指缩放,但代码在笔记本电脑上确实更容易阅读,因为两个版本可以并排显示,缩进对齐。

隐私与工作原理

您的代码永远不会离开浏览器。diff、高亮和渲染都在您的计算机上运行。我们不上传文本,不记录,也不传递给任何第三方服务。这对于专有代码审查尤为重要:将未发布的功能、安全补丁或来自私有 repo 的代码片段粘贴到云服务中,本身就可能违反您公司的数据处理政策。验证这一点很简单:打开浏览器的 DevTools,切换到 Network 标签页,粘贴两个版本并观察。比较时没有任何出站请求。相同的隐私模式适用于我们的其他工具,包括 compare-textcompare-jsoncompare-yaml代码审查在审查界面值得信赖时效果最佳。