智能体花了十分钟修改你的项目,然后回复"完成"。提交之前,你想确切知道改了什么,最好还能知道每处改动是由你的哪条指令引起的。Verboo Code 的 /diff 命令不用离开会话就能同时给出这两样:仓库里所有未提交的改动,以及对话中每一轮分别编辑了什么。
/diff 在 Verboo Code 里做什么?
它会打开一个对话框,显示用 git diff HEAD 计算出的未提交改动,并为智能体编辑过文件的每一轮对话各提供一个标签。你可以在文件列表中移动,逐个打开文件的 diff,新增和删除的行用颜色区分,无需再开一个终端。
如何一步步审查智能体的改动?
在会话中输入:
/diff
对话框打开后,标题为 Uncommitted changes (git diff HEAD),并附有类似 4 files changed +87 -12 的摘要。下方是文件列表。快捷键如下:
| 按键 | 在文件列表中 | 在文件内部 |
|---|---|---|
↑ / ↓ | 选择文件 | (无效果) |
Enter | 打开该文件的 diff | (无效果) |
← / → | 切换来源:Current、T3、T2…… | ← 返回列表 |
Esc | 关闭对话框 | 返回列表 |
如何只看某一条指令改了什么?
在列表中使用 ← 和 →。只要有某一轮对话编辑过文件,顶部就会出现选择器,例如 Current · T3 · T2 · T1,最近的一轮排在最前。每一轮从你的一条消息开始,标题显示轮次编号和你指令的开头(截取 30 个字符),例如 Turn 3 "给登录表单加上校验"。
这正好解决一个典型场景:智能体在三条指令中改了六个文件,结果有个测试挂了。你不必读完整个 diff,打开 T2 就只看到第二条指令改了什么。没有编辑文件的轮次不会出现在选择器中。
陷阱:按轮次的 diff 只能看到文件工具做的编辑。它根据文件编辑和写入工具(Edit 和 Write)的结果来构建每一轮。如果智能体是通过终端命令改的文件,比如 sed -i、npm run format、prettier --write 或代码生成器,这些改动不会出现在该轮中。它们会出现在 Current 里,因为那里由 git 计算。不确定时,对比一下:
# git 看到的改动,不论文件是怎么被编辑的
git diff HEAD --stat
如果某个文件出现在 --stat 中却不在任何一轮里,说明它是被命令改动的,而不是编辑工具。
为什么我明明有改动,/diff 却显示 "Working tree is clean"?
因为只要 git 没有返回 diff,Current 就会显示这条信息,而不只是在仓库干净时。在认定智能体什么都没保存之前,先检查下面四种情况:
| 情况 | /diff 在 Current 中显示 | 怎么办 |
|---|---|---|
| 正在进行 merge、rebase、cherry-pick 或 revert | Working tree is clean,这是有意为之:这些改动来自另一个分支,而不是智能体 | 完成或中止该操作(git rebase --continue、git merge --abort),再重新打开 /diff |
| 仓库还没有任何提交 | Working tree is clean,因为没有 HEAD 时 git diff HEAD 会失败 | 先做第一次提交;在此之前用轮次(←/→)查看 |
| 目录不在 git 仓库中 | Working tree is clean | 执行 git init,或通过轮次审查 |
| 仓库非常大,git 耗时超过 5 秒 | 可能为空,因为每次调用 git 都有 5 秒上限 | 直接在终端运行 git diff HEAD --stat |
/diff 有哪些限制?
这个对话框是为快速审查设计的,不适合超大的 diff。限制写在 CLI 源码中:
| 情况 | 行为 |
|---|---|
| 改动文件超过 50 个 | 列表只显示前 50 个;顶部摘要仍是真实总数 |
| 改动文件超过 500 个 | 只显示总数,并提示 Too many files to display details |
| 单个文件改动超过 400 行 | 标记为 (truncated),末尾显示 diff truncated (exceeded 400 line limit) |
| 单个文件的 diff 超过 1 MB | Large file - diff exceeds 1 MB limit |
| 二进制文件 | Binary file - cannot display diff |
| 尚未被跟踪的新文件 | 显示为 (untracked),不显示内容,并提示 Run `git add <file>` to see line counts. |
被 .gitignore 忽略的新文件不会出现在列表中。要在 Current 中查看新文件的内容,把它加入暂存区即可,因为 git diff HEAD 比较的是最后一次提交与磁盘上的内容,无论是否已暂存:
git add src/new-module.ts
关闭并重新打开 /diff:对话框在打开时计算 diff,此时该文件会连同新增的行一起显示。在按轮次的 diff 中,新文件本来就会完整显示,因为它直接来自写入工具的结果。
在 /diff 里发现了错误的改动,怎么撤销?
取决于改动来自哪里。如果是最后一条指令,/rewind 会把对话和代码一起回退到那一轮之前。如果只是单个文件,用 git 就能解决,不影响对话:
# 丢弃某个已跟踪文件的改动
git restore src/auth/login.ts
如果想尝试另一种方案又不丢掉当前方案,在提出替代方案之前用 /branch 分叉对话。
逐轮审查最适合小指令:一条指令,一处改动,选择器里一个 T。在 Verboo Code 上,各套餐都是不限 token 的,所以把任务拆成十条短指令,花费和一次性发出全部内容相同。



