AI 编码回滚工作流:让每次改动都可逆的 git 纪律

AI 跑前先 commit、AI 输出审 diff 再 commit、长任务每 3-5 步 commit、可能要的改动用 stash——四步纪律让 AI 在 12 个文件里改错时也能干净回滚。

最糟的 AI 编码会话不是”AI 改错了一处”——是”AI 在 12 个文件里改错了 47 处,你哪一处都干净撤不回,因为你让它在脏 tree 上跑”。这套流程给你让每次 AI 改动都可逆的 git 四步纪律、让”撤回”成本极低的 commit 节奏,以及确实需要从乱 diff 里剥出问题时的恢复 playbook。

这篇讲什么

AI 辅助编码的 git 回滚纪律:AI 跑前先 commit、AI 输出审 diff 再 commit、长任务每步 commit、“可能还要”的改动用 stash。还是你熟悉的 git——只是节奏更严,因为 AI 改文件又快又多。

这篇适合谁看

任何让 AI 助手改代码的人:Cursor / Copilot / Claude Code / Cody 用户、跑自主 agent 的独立开发者、采用 AI 编码流程的团队、说过”等等,怎么撤回”的工程师。

什么时候适合用

让任何 AI 助手或 agent 碰代码前。尤其是长自主 run 之前、跨文件重构、或你打算连续接受多个 AI 建议的会话之前。

什么时候不建议用

不在意撤回(也没什么可丢)的 greenfield 原型。每个建议立即接 / 拒的实时 pair programming(IDE undo 够用)。AI 只在解释不在改的只读会话。

开始前准备

  • 确认 working tree 干净:git status 啥都没有。手头进行中的先 stash 或 commit。
  • 确认当前状态测试通过。AI 改动前要有 “known-good 基线”。
  • 设 commit 节奏规则:每个 AI 逻辑建议至少 1 commit。长 agent run 每 3-5 步 1 commit。
  • 知道你的 remote 状态。一周没 push 了 agent 跑炸,工作就丢了。先 push 基线。

具体步骤

  1. 让 AI 跑前 commit。哪怕”WIP”也行——目的是 AI 改动后 diff 是干净的。git commit -am "wip: baseline before AI refactor of userService"
  2. AI 跑完 commit 前一定先 git diff。逐行看你没要求的改动:被删的错误处理、被去的 null check、被改的 export 名、“优化”的循环(语义微变)。
  3. diff 干净:stage + commit + 描述性 message。“ai: refactor callbacks to async/await in userService”。
  4. diff 有问题但大部分好:用 git add -p 只 stage 好的部分,commit。剩下的 git checkout -- <files>git restore 弃掉。
  5. 多步 agent 任务:强制步骤间 commit。告诉 agent:“每个 ticket 停一下,我 commit 后你继续。” 长 agent run 无中间 commit 就是 4 小时灾难的来源。
  6. AI 出的”可能还要但当下不要”的改动用 git stash push -m "ai: 抽出 helper, 可能复用"
  7. agent run 跑偏时直接 abort + git reset --hard HEAD 回到上次 known-good。比从 40 处乱改里剥 bug 便宜得多。
  8. 频繁 push。本地 commit 不算备份。高风险 run 前先 push 基线、每个干净 checkpoint 后也 push。

第一次实操怎么跑

  1. 选一个你平时随手让 AI 做的小任务——跨模块改函数名、抽 helper。
  2. 走完整纪律:干净 tree、基线 commit、AI 跑、diff 审、选择 stage、commit、push。
  3. 跟你平时”直接让它改”对比计时。开销很小(2-3 分钟);安全收益巨大。
  4. 第二次故意接受一个坏 AI 建议,练习回滚。git resetgit restore 是你压力下要的肌肉记忆。

完成后检查

  • 每次 AI 会话都从 git status 干净开始。不破例。
  • 每个 AI diff commit 前都逐行审。没有”看着行,全 commit”。
  • 长 agent run 有中间 commit——永远不是一个巨大 final commit。
  • 每个 commit 后测试通过。坏 commit 让 bisect 没用。
  • 高风险 run(大重构、自主 agent)前基线已 push 到 remote。

怎么复用这套流程

  • 把四个命令练成肌肉记忆:git statusgit diffgit add -pgit restore。这是你的 AI 安全工具箱。
  • 建项目级”AI 前 checklist”片段,每次会话前粘:“tree 干净、基线已 commit、基线已 push、测试绿”。
  • agent run 写一段 system prompt 强制步骤间停:“每个任务完输出 diff 摘要,等人确认。”
  • 每次模型更新重评节奏。有的 agent 稳到能跑长自主,有的仍需逐步确认。

建议的操作流程

干净 tree → 基线 commit → push 基线 → 跑 AI → 审 diff → 选择 stage → commit → 循环。自主 agent 加显式步骤边界 + 强制步间 commit。

容易踩的坑

  • 脏 tree 跑 AI——分不清你的在改和 AI 的改。先 stash。
  • 长 agent run 无中间 commit——出问题(一定会)就丢几小时工作或剥乱麻。
  • 不审 diff “看着行全 commit”——AI 的静默改动(删错误处理、删 guard)就这么上线。
  • 高风险 run 前没 push——本地 commit 不算备份;agent 跑炸 repo 工作彻底丢。
  • 一个巨大 final commit——bisect 失败无法定位。每个逻辑步骤一 commit。
  • 跳过”测试绿”基线——分不清是 AI 改坏的还是本来就坏的。

FAQ

  • 不用 git 怎么办?: 用 git。AI 改的代码在 source control 之外没有可比的回滚方案。
  • 能用 stash 代替 commit 吗?: 短期藏行。长 run 检查点用 commit 更稳——stash 容易丢。
  • IDE undo history 行吗?: 单点改有用,多文件 agent run 没用。git 才是唯一可信源。
  • 巨大 AI diff 怎么高效审?: 用 git diff --stat 看文件图,再逐文件 git diff <file>。先看”意外文件”——它们暗示 scope 漂移。
  • 能脚本化吗?: 能。pre-AI commit hook(pre-ai.sh)做 git status; git diff --stat; git stash 在团队采用 AI 编码时常见。

相关阅读

标签: #AI 编程 #教程