Skip to content

验证结果并保留原有修改 ​

测试通过只能说明测试覆盖的行为。交付还要回答:这次改了哪些文件,哪些修改原本就存在,如果需要撤回,能否保留用户正在做的工作?先记录起点,恢复时才有依据。

先在隔离练习里做一次 ​

下载保留修改练习 v1.0.0。需要 Node 22+ 与 Git;本方实测 macOS。解压到含 run.mjs 的目录,执行:

sh
node run.mjs

脚本在系统临时目录创建它自己的 Git 仓库,不对你当前仓库做恢复。目录会保留在输出里,可打开逐项检查。它创建一个基线,然后按顺序模拟两方修改:用户把 settings.json 主题从 system 改为 paper,并新建 notes.md;Agent 把 src/cart.mjs 金额从 98 改为 106。

读懂混合 diff ​

实际 mixedDiff 同时包含两个已跟踪文件的变化,另有未跟踪笔记。只看 git diff 会漏掉未跟踪文件,因此还要看:

sh
git status --short
git diff --stat
git diff

判断改动归属时,用任务开始前保存的状态与任务范围核对。本练习将原始 userDiff、混合 mixedDiff 和最终 finalDiff 一并放进 实际执行记录。

恢复只属于本次的文件 ​

本例明确知道 src/cart.mjs 的变化全由本次 Agent 产生,用户未修改该文件,因此脚本执行:

sh
git restore --source=HEAD -- src/cart.mjs

恢复后实际状态为:

text
 M settings.json
?? notes.md

脚本用固定断言检查主题仍为 paper、笔记内容逐字不变、cart 回到 98。恢复的目标是撤回本次代码,不是让整个工作区变干净。git restore 的语义参见 Git 官方文档。

同一文件有混合修改怎么办 ​

上面的证明仅覆盖不同文件隔离。如果用户和 Agent 都改了 cart.mjs,整文件恢复可能丢掉用户工作。先保存补丁和必要的未跟踪文件,再按 diff 逐块处理;在不确定归属时暂停该文件的恢复,补齐起点依据。不要把这次练习的单文件命令推广成无条件回滚方法。

一份完整的结果检查 ​

先核对实际命令和退出码,再读 diff 确认范围,然后检查未跟踪文件与生成产物。最后用同一个输入复测。没有运行的检查写为未运行,不能因为另一台机器或另一提交成功就写成本次通过。

下一课把跨任务重复的约束整理为 AGENTS.md,再用 购物车案例 练习一次真正修复。