AI 把你代码改坏了,你的第一反应是什么?
很多人的第一反应是敲下 `git reset --hard`。但这条命令恰恰是所有"后悔药"里最猛、也最容易误伤的一个——它连你自己还没提交的修改一起清掉。另一边,用了几个月 Claude Code 的人,可能压根不知道它每次动手改文件前都偷偷帮你存了档,双击两下 Esc 就能读档回来。
AI 写代码越快,"撤销"这件事就越值得认真学一次。我把官方文档和最近半年社区里几篇实操文章(微信、知乎、小红书上都有踩坑记录)翻了一遍,把 AI 编程时代的后悔药整理成三层安全网,外加一张决策表。看完你就知道:翻车的时候,先按哪个键。
第一层:工具自带的检查点,管"刚才那一下"
先说被低估最深的功能:Claude Code 的检查点(Checkpoint)。
它的机制是:你每发一条指令、Claude Code 每次用自己的编辑工具改文件之前,都会自动给当前代码状态拍一张快照。不用配置,装好就生效,快照存在你自己电脑的 ~/.claude 目录里,默认保留 30 天,关掉终端第二天再打开也能找到。微信公众号

要用的时候两种方式:输入 `/rewind`,或者在输入框为空的时候连按两次 Esc。菜单里会列出你发过的每条指令,选中一条,可以三选一:代码和对话一起回退、只回退对话、只回退代码。回退完,当时那条指令还会自动填回输入框,方便你改个说法重新来。小红书

检查点管"我刚才",Git 管"我这周"——社区里流传的这个总结很到位。微信公众号
但这里必须把边界说清楚,三件事它救不了:
bash 命令造成的文件变化不追踪。 Claude 在终端里执行 rm、mv、cp、sed -i 改掉的东西,检查点里没有记录,rewind 救不回来。知乎
会话外的改动不追踪。 你自己在编辑器里手动改的文件、另一个并行会话改的文件,通常都不在快照范围内。
它不是 Git 的替代品。 官方定位就是"本地撤销键",负责会话级快速试错;永久、可审计的版本历史,还得靠 commit。微信公众号
第二层:Git 单文件级,管"就坏了几个文件"
如果 AI 的破坏范围有限——就是改坏了某一两个文件,别动用整仓库级别的命令,Git 有更精细的手术刀:
文件被改乱了、还没 add:`git restore 文件名`,恢复到上次提交的样子(Git 2.23 之后的推荐写法,比老的 `git checkout --` 直观)。知乎微信公众号
已经 add 了但没 commit:先 `git restore --staged 文件名` 撤出暂存区,再决定要不要丢修改。
已经 commit 了,但发现某个文件还是旧版本好:`git checkout 那个commit号 – 文件名`,只把这一个文件恢复到当时的内容,其他文件纹丝不动。

一个容易踩的坑:如果同一个文件里既有 AI 改坏的部分,也有你自己手写的修改,不要整个文件 restore,先 `git diff` 看清楚,手动挑出坏的部分。
第三层:Git 提交级,管"这一整段都想重来"
破坏范围大、或者已经提交推送了,才轮到提交级命令,三兄弟分工很明确:
git revert:已经 push 到远程的提交,用它。原理是新增一个"反向提交"抵消错误,历史完整保留,同事 pull 不会炸。线上分支只认它。什么值得买
git reset:还没 push 的本地提交,用它回退。`–soft` 最温柔(撤销提交、改动留在暂存区),默认的 mixed 居中,`–hard` 最狠(提交和改动全没)。用 --hard 之前,先跑一遍 `git status` 和 `git diff`,确认工作区里没有你自己还没保存的东西。微信公众号
git reflog:终极后悔药。前面两步都操作错了、分支删了、reset 过头了,`git reflog` 能列出你所有操作记录,找到出事前的 commit 号就能回去。它救过的项目比你想的多。今日头条
社区里一句话总结得好:reset 是后悔,revert 是纠错,reflog 是后悔药的后悔药。
翻车现场决策表
把常见的几种事故对号入座:
你遇到的情况 | 先用什么 |
|---|---|
AI 刚改完一轮,整体不满意,还在当前会话里 | 双击 Esc → /rewind,恢复代码和对话 |
大方向对,就某一步把文件改坏了 | /rewind 选"只恢复代码",或 git restore 单文件 |
AI 在终端里 rm/mv 了文件 | 检查点救不了,git restore / git checkout 从历史找 |
改坏的文件里混着你自己的手写修改 | 先 git diff,手动剔除坏的部分,别整文件回退 |
提交还没 push,想整个作废 | git reset --soft HEAD~1,改动还在,重新组织 |
已经 push 到远程/主分支 | git revert,千万别 force push |
一通操作后彻底乱了、分支都没了 | git reflog 找回出事前的 commit,再 checkout 回去 |

但真正的防线在翻车之前
最后说句实在话:撤销是保险,不是日常。
最近社区里有个讨论很值得听——有文章专门分析过,AI 工具的提交往往是跨文件联动的,一个 commit 里塞着五个文件的改动,这时候回退一个 commit 等于把五个文件一起撤掉,你想撤的那一行和无关的正确修改会被一起带走。什么值得买commit 粒度太粗的时候,后悔药会变成拆盲盒。
所以几个老习惯反而更值钱。让 AI 动手前先 commit 一次当安全点。一个任务一个 commit,别让 AI 把新页面、重构、测试塞进同一次提交。微信公众号给 AI 生成的提交加个 ai: 前缀,回退时一眼能认出哪些是它干的。什么值得买提交信息别写"更新"两个字,写清楚改了什么——翻车时你会感谢当时的自己。
顺便一个值得留意的方向:Git 3.0 正在路上,默认分支将改为 main、引入 SHA-256。知乎AI 编程工具的检查点机制也还在快速迭代,边界随时可能变化。今天这份决策表的逻辑不会过时,但具体命令的行为,动手前以你手上版本的官方文档为准。
你现在让 AI 改代码之前,会先存档吗?评论区聊聊你的翻车和自救经历。