跳转到内容

一次说错可以撤回:checkpoint 用法

📍 Claude Code 干活

一个时光倒退的箭头盖在文件堆上,机器人轻微抱歉的表情

某个工作日午后,你跟 Claude Code 说:

「把这个项目的代码风格统一一下,有些地方用 camelCase 有些用 snake_case,挑一个标准全部统一。」

它非常热情:

「好的,我看了一下,你的项目大部分文件偏向 camelCase,我已经把全项目 26 个文件全部统一成了 camelCase!」

你打开 git diff,3,400 行修改。

你心一沉——你早上刚跟客户对齐过,这个项目要走 snake_case 才能跟他们的库对接。它把方向完全做反了。

如果只有 git,你接下来要:git reset + 解释为什么 staging 区(暂存区:git add 之后、等着提交的地方)里有这么多怪改动 + 担心丢掉同时段的另一组合理改动…

Checkpoint 就是为这一刻而生:按两下 Esc,回到改之前,不影响其他东西。

灾难场景,机器人手悬在空中

简单粗暴:你每发一条消息、开始新一轮之前,Claude Code 都会自动存一个快照(检查点)。

这个快照:

  • ✅ 记录了接下来被 Claude 改的文件的「改前」内容
  • ✅ 不污染你的 git 历史(完全独立)
  • ✅ 跟着会话保存:关掉 Claude Code、之后恢复会话,照样能回滚;一个会话保留最近 100 个,默认约 30 天后清理
  • ✅ 打开回滚菜单,选一下就能跳回去

⚠️ 但有几条必须先知道的边界:快照只管 Claude 用它的编辑工具直接改的文件。下面这些不在快照里,回滚救不回,只能靠 git:

  • 它跑的命令造成的后果——rm 删掉的文件、git 操作、装进系统的软件
  • 子智能体(subagent,Claude 派出去干活的帮手)改的文件:现在 Claude 会自己派子智能体,默认在后台跑,它们的改动通常不进你的检查点;后台跑的 /code-review --fix(自动审代码并修改)也一样
  • 你在 Claude Code 之外手动改的文件,以及另一个会话同时改的文件

这也是后面「坑 0」要单独讲的。

自动存档时间线

类比一下:

  • Checkpoint = 游戏存档点 — 死了能读档,不用从头开始
  • Git commit 是给团队看的「正式版本」(整理过、配 message)
  • Checkpoint 是给你和 AI 之间的「小灶」(自动、密集、随便丢)

重点区别:Git 是你手动commit;Checkpoint 是 Claude 自动存,你不用想着保存。

两个入口,效果一样:

  • 连按两下 Esc(最快,建议练成肌肉记忆;输入框要先清空——里面有字时,按两下 Esc 是清空草稿)
  • 输入 /rewind(它有两个别名:/checkpoint 和 /undo,打哪个都行)

打开后是一个交互式菜单:你在这段对话里发过的消息一条条列出来,每一条就是一个可以回去的节点。

checkpoint 列表的 UI 卡片样式

用方向键挑中你想回到的那条消息——比如你让它大改的那一条。选中它,就是回到你发这条消息之前的样子。

选中节点后,菜单会问你要做什么。最常用的是三个恢复选项(界面上是英文):

选项效果什么时候用
Restore code(只恢复代码)文件回到那时,对话记录保留改坏了,但想让它记得刚才聊过什么
Restore conversation(只恢复对话)对话回到那时,文件保持现状文件没问题,只想「收回」后面说的话
Restore code and conversation(代码和对话都恢复)文件 + 对话一起回去整段方向都错了,彻底重来

菜单里还有三项:Summarize from here(把这条消息往后的对话压成摘要)和 Summarize up to here(把这条消息之前的对话压成摘要),相当于只压缩一段的 /compact,不改文件;Never mind 是什么都不做、返回。如果选中的节点之后没有被追踪的文件改动,菜单里就不会出现两个恢复代码的选项。

选完回车,瞬间还原。菜单上能看到受影响的范围;想看具体哪几行变了,用 git diff 最清楚。

⚠️ 关键提醒:回滚是累积的——回到某个节点,等于把那之后的所有改动一起撤掉,不能只挑着撤中间某一组。想精细挑选,那是 git cherry-pick(只挑某一次提交单独拿过来用)的活,checkpoint 做不到。

高风险操作前,先钉一个安全点

Section titled “高风险操作前,先钉一个安全点”

手往时间线插一面小旗,标记安全点

自动快照是在你每发一条消息之前存的。但接下来要干的事风险特别高的时候(大重构、用 bypass 模式跑大任务、让子智能体批量改文件、周五下班前),多给自己留一层保险——让它先提交一个 git 安全点:

「先 git commit 一下当前状态,message 写 before-refactor-api,然后再开始改。」

这样哪怕 checkpoint 过期、会话丢了,git 里永远有一个你亲手钉住的版本。

场景为什么要钉安全点
准备让 AI 大刀阔斧重构一旦方向错,要能秒退
已经跑通了一个 demo,想试新方案试新方案前先存「已知能跑」的版本
准备让它用 bypass 模式(跳过所有权限确认)跑大任务给自己留个底牌
准备让子智能体批量改文件它们的改动回滚撤不回,只能靠 git
周五下班前周一回来如果方向乱了,周五的版本随时回

一句话:Checkpoint 不替代 Git,Git 也不替代 Checkpoint。

用 Checkpoint 处理:

  • 跟 AI 的密集试错(它改 → 你看 → 不对再回滚 → 它再改)
  • 你不想污染 git 历史的零碎改动
  • 当天的回退需求

用 Git 处理:

  • 正式发布的版本(打 tag、做 release)
  • 团队协作的版本(同步给别人 / pull request)
  • 跨周 / 跨月的回退

最佳节奏:

  1. 早上git pull 拿最新代码
  2. 白天用 Claude Code 改,全程靠 checkpoint 来回试
  3. 改顺了,手动 git add + git commit 给团队
  4. 第二天重新走一遍

❌ 坑 0(最重要):以为它啥都能撤——命令的后果、子智能体的改动救不回

Section titled “❌ 坑 0(最重要):以为它啥都能撤——命令的后果、子智能体的改动救不回”

checkpoint 只给它用编辑工具直接改的文件拍快照。它跑 rm 删掉的文件、git push 出去的提交、装进系统的软件包,子智能体(包括后台跑的任务)改的文件,还有你自己在外面手动改的、别的会话同时改的,都不在快照里——回滚回不来。

修正:新版 Claude Code 默认用 auto 模式(自动模式):大部分命令由一个分类器(专门审核操作的模型)代替你把关、自动放行,不会一条条弹框问你;它会拦下强推、git reset --hard 这类危险操作,但不是所有后果都拦得住。想逐条把关高危命令(删除、推送、装卸软件),按 Shift+Tab 切到 Manual(手动确认);接 DeepSeek 时通常本来就从 Manual 开始,以状态栏显示为准。详见让 Claude 跑命令。真要试险、或者要让子智能体批量改文件,先让它 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 是只存在本机的、有保留期的——

  • 换电脑:checkpoint 不跟你走
  • 保留期超了:默认约 30 天后会被自动清理(设置里的 cleanupPeriodDays 可以调长)
  • 命令、子智能体、手动改的文件:本来就不在里面

关掉 Claude Code 倒不会丢:检查点跟着对话保存,用 claude --resume 恢复会话后照样能 /rewind。

修正:长期备份还是要 git。Checkpoint 是「临时撤销键」,不是替代品。

假设你跟 Claude Code 这样一段对话:

你: 把全项目代码风格统一成 camelCase。
AI: 好的,已修改 26 个文件。
你: (git diff 扫了一眼)完蛋,客户那边要 snake_case,撤回。
你: (按两下 Esc,回滚菜单弹出)
你: (选中「把全项目代码风格统一成 camelCase」这条消息 → 选 Restore code → 回车)
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 个最常见报错的「症状 → 原因 → 修复」速查

→ 怎么省钱:成本控制实战 —— 控制 Claude Code 花费的几个手法

想及时看到更新,可以收藏 niuxue.org 主页。