跳转到内容

回退功能

Rewind(回退)是 Claude Code 的撤销机制。当 Claude 的更改出了问题时,你可以快速恢复到之前的状态。


通过以下方式访问回退功能:

快捷键

Esc + Esc(双击 Escape 键)

命令

输入 /rewind 命令

两种方式都会打开一个可滚动的检查点列表


从检查点列表中,你可以选择以下操作:

操作效果
恢复代码和对话将文件更改和对话都恢复到选定的时间点
仅恢复对话保留当前代码,只回退对话
仅恢复代码恢复文件更改,保留对话
从此处总结压缩从选定点向后的对话(释放空间但不回退)

  • 只对 Claude 的更改有效(不影响手动编辑)
  • 在当前会话内工作
  • Git 提交不会被自动回退

当事情出错时,你有多层恢复选项。使用能解决问题的最轻量方式:

┌─────────────────────────────────────────────────────────┐
│ 恢复阶梯 │
├─────────────────────────────────────────────────────────┤
│ │
│ 第 3 层:Git 恢复(核选项) │
│ ───────────────────────── │
│ • git checkout -- <file> (丢弃未提交更改) │
│ • git stash (保存以备后用) │
│ • git reset --hard HEAD~1 (撤销最后一次提交) │
│ • 适用于:手动编辑、多会话场景 │
│ │
│ 第 2 层:/rewind(会话内撤销) │
│ ───────────────────── │
│ • 回退 Claude 最近的文件更改 │
│ • 仅在当前会话中有效 │
│ • 不影响 git 提交 │
│ • 适用于:错误的代码生成、方向偏差 │
│ │
│ 第 1 层:拒绝更改(内联) │
│ ──────────────────── │
│ • 在审查 diff 时按 'n' │
│ • 更改从未被应用 │
│ • 适用于:在问题发生之前拦截 │
│ │
└─────────────────────────────────────────────────────────┘
场景恢复层级命令
Claude 提出了错误代码第 1 层n 拒绝
Claude 已做了更改,想要撤销第 2 层/rewind
更改已提交,需要完全回滚第 3 层git reset
实验性分支出了问题第 3 层git checkout main
上下文被污染,行为异常重新开始/clear + 重新陈述目标

在执行有风险的操作之前:

你:在尝试这个实验性方案之前,让我们先提交当前的工作

这会创建一个你随时可以返回的 git 检查点。


对于系统化的实验,使用检查点模式创建安全恢复点:

  1. 创建检查点

    Terminal window
    git stash push -u -m "checkpoint-before-refactor"
    # 保存所有更改,包括未跟踪的文件
  2. 自由实验

    • 尝试有风险的重构、架构更改等
    • 如果成功 -> 正常提交
    • 如果失败 -> 恢复检查点
  3. 恢复检查点

    Terminal window
    git stash list # 找到你的检查点
    git stash apply stash@{0} # 恢复但不删除
    # 或
    git stash pop stash@{0} # 恢复并删除

可以创建 Stop 钩子在会话结束时自动创建检查点:

.claude/hooks/auto-checkpoint.sh
# 参见:examples/hooks/bash/auto-checkpoint.sh
# 会话结束时自动创建 git stash
# 命名:claude-checkpoint-{branch}-{timestamp}
# 日志:~/.claude/logs/checkpoints.log

有风险的重构

检查点 -> 尝试 -> 提交或恢复

A/B 测试方案

检查点 -> 尝试 A -> 恢复 -> 尝试 B -> 比较

增量迁移

检查点 -> 迁移一部分 -> 测试 -> 重复

原型探索

检查点 -> 实验 -> 干净地丢弃

特性检查点(git stash)分支
速度更快需要创建和切换
未提交更改保留需要先提交或 stash
适用范围快速实验长期开发
跨文件支持支持