一次说错可以撤回:checkpoint 用法
📍 干活 5/10 · 上一篇:← 上下文窗口怎么算的

一个迟早会撞上的灾难时刻
Section titled “一个迟早会撞上的灾难时刻”某个工作日午后,你跟 Claude Code 说:
「把这个项目的代码风格统一一下,有些地方用 camelCase 有些用 snake_case,挑一个标准全部统一。」
它非常热情:
「好的,我看了一下,你的项目大部分文件偏向 camelCase,我已经把全项目 26 个文件全部统一成了 camelCase!」
你打开 git diff,3,400 行修改。
你心一沉——你早上刚跟客户对齐过,这个项目要走 snake_case 才能跟他们的库对接。它把方向完全做反了。
如果只有 git,你接下来要:git reset + 解释为什么 staging 区里有这么多怪改动 + 担心丢掉同时段的另一组合理改动…
Checkpoint 就是为这一刻而生:按两下 Esc,回到改之前,不影响其他东西。

Checkpoint 是什么
Section titled “Checkpoint 是什么”简单粗暴:Claude Code 每次动你的文件之前,自动存一个快照。
这个快照:
- ✅ 记录了所有被改文件的「改前」内容
- ✅ 不污染你的 git 历史(完全独立)
- ✅ 跟着会话保留(直到超过保留期被清理)
- ✅ 打开回滚菜单,选一下就能跳回去
⚠️ 但有一条必须先知道的边界:快照只保文件编辑。它跑的命令造成的后果——rm 删掉的文件、git 操作、装进系统的软件——不在快照里,回滚救不回。这也是后面「坑 0」要单独讲的。

类比一下:
- Checkpoint = 游戏存档点 — 死了能读档,不用从头开始
- Git commit 是给团队看的「正式版本」(整理过、配 message)
- Checkpoint 是给你和 AI 之间的「小灶」(自动、密集、随便丢)
重点区别:Git 是你手动commit;Checkpoint 是 Claude 自动存,你不用想着保存。
怎么打开回滚菜单
Section titled “怎么打开回滚菜单”两个入口,效果一样:
- 连按两下 Esc(最快,建议练成肌肉记忆)
- 输入
/rewind(它有两个别名:/checkpoint和/undo,打哪个都行)
打开后是一个交互式菜单:你们这段对话的历史消息一条条列出来,每一条就是一个可以回去的节点。

用方向键挑中你想回到的那个时间点——比如「它开始大改之前、你说那句话的时刻」。
选中节点后,菜单会问你恢复什么,三个选项:
| 选项 | 效果 | 什么时候用 |
|---|---|---|
| 只恢复代码(Restore code) | 文件回到那时,对话记录保留 | 改坏了,但想让它记得刚才聊过什么 |
| 只恢复对话(Restore conversation) | 对话回到那时,文件保持现状 | 文件没问题,只想「收回」后面说的话 |
| 两个都恢复(Restore both) | 文件 + 对话一起回去 | 整段方向都错了,彻底重来 |
选完回车,瞬间还原。菜单上能看到受影响的范围;想看具体哪几行变了,用 git diff 最清楚。
⚠️ 关键提醒:回滚是累积的——回到某个节点,等于把那之后的所有改动一起撤掉,不能只挑着撤中间某一组。想精细挑选,那是 git cherry-pick 的活,checkpoint 做不到。
高风险操作前,先钉一个安全点
Section titled “高风险操作前,先钉一个安全点”
自动快照跟着它的每次编辑走。但接下来要干的事风险特别高的时候(大重构、bypass 模式跑大任务、周五下班前),多给自己留一层保险——让它先提交一个 git 安全点:
「先 git commit 一下当前状态,message 写 before-refactor-api,然后再开始改。」
这样哪怕 checkpoint 过期、会话丢了,git 里永远有一个你亲手钉住的版本。
| 场景 | 为什么要钉安全点 |
|---|---|
| 准备让 AI 大刀阔斧重构 | 一旦方向错,要能秒退 |
| 已经跑通了一个 demo,想试新方案 | 试新方案前先存「已知能跑」的版本 |
| 准备让它 bypass 模式跑大任务 | 给自己留个底牌 |
| 周五下班前 | 周一回来如果方向乱了,周五的版本随时回 |
Checkpoint 跟 Git 的关系
Section titled “Checkpoint 跟 Git 的关系”一句话:Checkpoint 不替代 Git,Git 也不替代 Checkpoint。
用 Checkpoint 处理:
- 跟 AI 的密集试错(它改 → 你看 → 不对再回滚 → 它再改)
- 你不想污染 git 历史的零碎改动
- 当天的回退需求
用 Git 处理:
- 正式发布的版本(打 tag、做 release)
- 团队协作的版本(同步给别人 / pull request)
- 跨周 / 跨月的回退
最佳节奏:
- 早上
git pull拿最新代码 - 白天用 Claude Code 改,全程靠 checkpoint 来回试
- 改顺了,手动
git add+git commit给团队 - 第二天重新走一遍
四个新手最容易踩的坑
Section titled “四个新手最容易踩的坑”❌ 坑 0(最重要):以为它啥都能撤——命令的后果救不回
Section titled “❌ 坑 0(最重要):以为它啥都能撤——命令的后果救不回”checkpoint 只给文件编辑拍快照。它跑 rm 删掉的文件、git push 出去的提交、装进系统的软件包,都不在快照里——回滚回不来。
修正:高危命令(删除、推送、装卸软件)通过之前多看一眼;真要试险,先让它 git commit 一个安全点。
❌ 坑 1:不知道 checkpoint 存在,出了事傻乎乎用 git
Section titled “❌ 坑 1:不知道 checkpoint 存在,出了事傻乎乎用 git”新手第一次撞上「AI 改坏了」,第一反应是:
git status看一堆乱七八糟的修改git reset --hard强行撤回(可能误伤其他改动)git stash然后再 stash pop
修正:装好 Claude Code 第一周,就把「Esc Esc 打开回滚菜单」练成本能。出事第一件事,先打开菜单看有哪些节点能回。
❌ 坑 2:回滚出好版本后,不钉进 git
Section titled “❌ 坑 2:回滚出好版本后,不钉进 git”回滚回到的「好版本」还只躺在工作区。接着又让 AI 折腾几轮、或 checkpoint 过期,你可能再也回不到这个点。
修正:回滚完确认没问题,立刻 git add + git commit——把好版本钉到 git 历史里,才算真正落袋。
❌ 坑 3:依赖 checkpoint 当唯一备份
Section titled “❌ 坑 3:依赖 checkpoint 当唯一备份”checkpoint 是本地的、有保留期的、Claude Code 进程相关的——
- 换电脑:checkpoint 不跟你走
- 保留期超了:checkpoint 可能被自动清理
- Claude Code 重装 / 升级:checkpoint 不一定保留
修正:长期 backup 还是要 git。Checkpoint 是「临时撤销键」,不是替代品。
一个真实场景演练
Section titled “一个真实场景演练”假设你跟 Claude Code 这样一段对话:
你: 把全项目代码风格统一成 camelCase。AI: 好的,已修改 26 个文件。你: (git diff 扫了一眼)完蛋,客户那边要 snake_case,撤回。你: (按两下 Esc,回滚菜单弹出)你: (选中「统一 camelCase」之前的那条消息 → 选「只恢复代码」→ 回车)AI: ✓ 已还原到该节点。你: 把全项目代码风格统一成 snake_case 而不是 camelCase。AI: 好的,已修改 26 个文件。你: (git diff 再扫一眼)好,这次对了。你: git add . && git commit -m "unify code style to snake_case"整个过程不到 10 分钟,没有污染 git 历史,也没有损失任何代码。
这就是 checkpoint 的真实价值——让你敢让 AI 大胆改。
读完这一篇你应该记住 4 件事:Esc Esc 打开回滚菜单、三种恢复选项怎么选、命令的后果救不回、好版本要钉进 git。
接下来:
→ 出错怎么办:常见报错排雷大全 —— 8 个最常见报错的「症状 → 原因 → 修复」速查
→ 怎么省钱:成本控制实战 —— 4 个手法把 Claude Code 月费砍到三十块
想第一时间收到,可以收藏 niuxue.org 主页。
如果你跟 AI 之间发生过最戏剧的 checkpoint 回滚,告诉我们 [email protected],优秀案例会精选放上来。