差异
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 --stat
src/pages/login.js | 12 +++++++----
1 file changed, 8 insertions(+), 4 deletions(-)diff 只显示差异,不显示全貌——这正是它的价值:不用读整个文件,就能看到这次到底动了哪里。
拆开看,里面有这几块
-
1
文件清单 File list
git diff --stat 的输出:改了哪些文件、每个文件加删几行。
-
2
差异行 Changed lines
git diff 的内容:加的行前面是 +,删的行前面是 -,一眼可辨。
-
3
上下文 Context
差异周围几行没改的代码,用来理解改动发生在什么位置。
-
4
对比两端 Two ends
对比的是哪两个版本:工作区、某次提交、某条分支,决定了 diff 问什么。
常见的有哪几种
你手上还没提交的改动 vs 上次提交的内容。
用在:验收 AI 刚改完、还没提交的东西
任意两个提交之间的差异。
用在:对比「这次提交」和「上次提交」到底改了啥
分支相对主线多了哪些改动。
用在:合并前审查会带回来什么
容易搞混?这样区分
看文件内容看到的是现在的全貌;diff 看到的是相对另一个版本的差异:哪几行加了、哪几行删了。判断方法:500 行的文件只改 1 行,diff 一眼看到那一行,通读文件得读 500 行。
提交记录(git log)是时间线:什么时候存了档、说明写了什么;diff 是空间对比:两个版本之间差在哪。判断方法:想知道「一共有哪些存档」看 log,想知道「这次改了什么」看 diff。
看 提交记录什么时候用得上
让它跑 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 说「这次就改了一点点,主要是样式」。最有效的拆穿方式是什么?
diff 是客观证据:改了几个文件、多少行,一跑就知道。「就改了一点点」是口头描述,和实际对不上就说明它在糊弄。重新生成不验证「改了什么」,风格判断更靠不住。