麦式参考 MickerBook Reference

差异

Diff

也常被叫作:改动对比diff对比版本

你可能会这么说

「让 AI 明确告诉你这次到底改了哪些文件、哪些行。」

差异 Diff

两个版本之间差在哪的逐行清单,验收 AI 改动的基本工具。

差异(diff)就是两个版本之间差在哪的清单。Git 里可以对比「工作区 vs 上次存档」「这个存档 vs 那个存档」「这条分支 vs 那条分支」,输出精确到每一个文件、每一行。

对用 AI 的人,diff 是最有力的验收工具。AI 说「我改好了」,你先别信,让它跑一条 git diff 给你看:改了哪几个文件、加了几行删了几行。它说的改动和 diff 对不上,就是有问题。

不用看懂 diff 的全部格式,会看三样就够:改了哪些文件(git diff --stat 的总览)、改了哪几行(git diff 的内容)、有没有超出预期的改动(比如出现了 .env、配置文件)。这三样看明白,AI 就糊弄不了你。

长什么样 真实可交互,不是截图

上一版git diff看清改了什么
git diff --stat
src/pages/login.js | 12 +++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
✓ 只看差异:500 行文件改 1 行,一眼看见
✕ 凭感觉说:「就改了一点点」

diff 只显示差异,不显示全貌——这正是它的价值:不用读整个文件,就能看到这次到底动了哪里。

拆开看,里面有这几块

  1. 1
    文件清单 File list

    git diff --stat 的输出:改了哪些文件、每个文件加删几行。

  2. 2
    差异行 Changed lines

    git diff 的内容:加的行前面是 +,删的行前面是 -,一眼可辨。

  3. 3
    上下文 Context

    差异周围几行没改的代码,用来理解改动发生在什么位置。

  4. 4
    对比两端 Two ends

    对比的是哪两个版本:工作区、某次提交、某条分支,决定了 diff 问什么。

常见的有哪几种

工作区 vs 上次存档git diff

你手上还没提交的改动 vs 上次提交的内容。

用在:验收 AI 刚改完、还没提交的东西

两个存档之间git diff A..B

任意两个提交之间的差异。

用在:对比「这次提交」和「上次提交」到底改了啥

分支 vs 主线git diff main..分支名

分支相对主线多了哪些改动。

用在:合并前审查会带回来什么

容易搞混?这样区分

差异 看文件内容 Read the file

看文件内容看到的是现在的全貌;diff 看到的是相对另一个版本的差异:哪几行加了、哪几行删了。判断方法:500 行的文件只改 1 行,diff 一眼看到那一行,通读文件得读 500 行。

差异 提交记录 Commit log

提交记录(git log)是时间线:什么时候存了档、说明写了什么;diff 是空间对比:两个版本之间差在哪。判断方法:想知道「一共有哪些存档」看 log,想知道「这次改了什么」看 diff。

看 提交记录

什么时候用得上

验收 AI 的改动

让它跑 git diff --stat 和 git diff,对照它的描述:说改的和实际改的对得上吗?

合并前审查

git diff main..分支名 --stat,看这次合并会带回来什么,确认范围再动手。

排查异常改动

diff 里出现 .env、配置文件、依赖清单——立刻停下问清楚,这些通常不该被改。

你可以这样跟 AI 说

直接复制下面这段,把【】里的换成你的情况。它比一句「帮我加个 X」多说清楚了:改哪里、不许动啥、做完交什么。

【任务】用 Git 告诉我 [项目目录] 里「[这次改动]」到底改了哪些文件、哪些行
【范围】只做对比查看,不修改任何文件
【边界】
  - 用 git diff(工作区 vs 上次存档)或 git diff 提交A..提交B(两个存档之间)对比,先把命令和输出贴给我
  - 先给 git diff --stat 的总览(改了哪些文件、各几行),再给关键文件的 git diff 内容
  - 用大白话翻译每处差异:这几行改动是干什么的,禁止只说「改了代码」
  - 差异里出现配置文件、.env、密钥、依赖清单这类「看起来不该改的」,单独标出来并解释为什么
【交付】
  1. git diff --stat 输出
  2. 每个改动文件一句大白话说明
  3. 指出任何超出预期的改动,并说明是否建议回退

diff 是最便宜的验收工具,但前提是 AI 愿意展示。这段要求它先给 --stat 总览、再给逐文件说明、单独标出异常文件——把「改了什么」从口头描述变成可核对的事实。

它说「做好了」,你怎么自己验

这是本站的重头戏。AI 最会的不是写代码,是说「已完成」。这一条,它通常最多做到「运行时」这层:真的跑起来了,能在本机看到结果。

要亲眼看到这些,才算数

  • 跑 git diff --stat,能看到改了几个文件、各加删几行——数字对不上 AI 的说法,就是有问题。
  • 跑 git diff,能看到具体哪几行加了(+)、哪几行删了(-),并和 AI 描述的内容对上。
  • 扫一遍文件清单:里面有没有 .env、配置文件、依赖清单这类不该被动的东西。
  • 让 AI 用大白话讲每处差异的目的,讲不出具体理由的改动,要求它解释清楚再继续。

它常这么糊弄你

  • 「就改了一点点」——git diff --stat 一跑,300 行。
  • 「没有动别的文件」——diff 里躺着 .env、配置文件、依赖清单。
  • 「这是新加的样式」——diff 显示一大块逻辑被删了重写。
  • 「改完了,都验证过了」——但要它贴 diff 时支支吾吾,或者贴的是无关文件的 diff。

diff 能验到「运行时」层:命令跑出来就是客观事实,你对照 AI 的描述就能判断。注意 diff 只能证明「改了哪些」,证明「为什么这么改」还要追问理由——那是内容级的验证,已经超出 diff 本身能回答的范围。

考考你 选一个你觉得对的

AI 说「这次就改了一点点,主要是样式」。最有效的拆穿方式是什么?