Skip to content

09. 版本回滚 (Rewind)

Rewind 功能让你能够回退到之前的会话状态,就像时光倒流一样。

🎯 什么是 Rewind?

核心概念

时间线:
过去 ←←← 现在 →→→ 未来

t-30m  t-20m  t-10m  现在
  │      │      │      │
 状态A  状态B  状态C  状态D

Rewind 让你回到:
状态A、B 或 C 中的任何一个

🕐 为什么需要 Rewind?

常见场景

  1. 误操作恢复

    删除了重要文件 → Rewind 回到 5 分钟前
  2. 尝试失败

    尝试新方案不work → Rewind 回到尝试前
  3. 分支探索

    想尝试不同方案 → Rewind 到起点,选择不同路径
  4. 意外中断

    会话意外关闭 → Rewind 恢复之前的状态

🔄 Rewind 工作原理

会话状态快照

Claude Code 会定期保存快照:

┌─────────────────────────────────────┐
│  Snapshot 1: t=0 (启动)             │
│  - 文件状态                          │
│  - 会话历史                          │
│  - 工作目录                          │
└─────────────────────────────────────┘

┌─────────────────────────────────────┐
│  Snapshot 2: t=5min                 │
│  - 新增了 2 个文件                   │
│  - 修改了 1 个文件                   │
└─────────────────────────────────────┘

┌─────────────────────────────────────┐
│  Snapshot 3: t=10min (当前)         │
│  - 又修改了 3 个文件                 │
│  - 运行了测试                        │
└─────────────────────────────────────┘

💻 实战示例

示例 1: 简单回滚

[14:00] 你: 创建一个新的用户认证模块

[14:05] Claude: → 创建 src/auth/login.js
            → 创建 src/auth/register.js
            → 修改 src/App.js

[14:10] 你: 等等,我改变主意了
         撤销刚才的所有更改

Claude: → Rewind 到 14:00
        ✓ 已恢复到会话开始时的状态

[14:11] 你: 现在我想添加一个搜索功能
         (而不是认证模块)

示例 2: 多次回滚

[10:00] 你: 添加 Redux 状态管理

[10:15] Claude: → 安装 redux
            → 创建 store
            → 添加 providers

[10:20] 你: 继续开发,添加 thunk 中间件

[10:35] Claude: → 安装 redux-thunk
            → 创建 actions

[10:40] 你: 我觉得 Redux 太重了
         能回到没有 Redux 的状态吗?

Claude: → Rewind 到 10:00
        ✓ 已移除 Redux 相关的所有更改

[10:41] 你: 让我用 Zustand 代替,它更轻量

示例 3: 分支探索

[09:00] 你: 我需要实现一个数据表格组件

[09:05] Claude: 好的,有两种方案:
         方案 A: 使用 react-table
         方案 B: 自己实现

[09:06] 你: 先试试方案 A

[09:15] Claude: [实现方案 A]
         → 安装 react-table
         → 创建 DataTable 组件
         → 集成到页面

[09:20] 你: 觉得不够灵活,试试方案 B

Claude: → Rewind 到 09:06
        ✓ 已移除方案 A 的代码

        [实现方案 B]
        → 创建自定义表格组件
        → 实现排序和过滤

[09:30] 你: 这个方案更好!

🎛️ Rewind 命令

基本语法

你: rewind 5 minutes
你: 回到 10 分钟前
你: rewind to 14:30
你: 回到快照 3

查看可用快照

你: 显示所有快照

Claude:
📸 可用快照
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

ID  时间              描述                 变更数
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1   14:00  会话开始                          0
2   14:15  添加用户认证                       5
3   14:30  添加 Redux 状态管理               12
4   14:45  添加路由                          8
5   15:00  当前状态                          0

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

选择性 Rewind

你: 只回滚 src/components/ 的更改
    保留其他文件

Claude:
→ 选择性 Rewind src/components/
✓ 已恢复 components/ 到快照 3
✓ 保留了其他目录的更改

🔧 Rewind 选项

确认模式

你: rewind 10 minutes (no confirm)

Claude:
⚠️  这将撤销以下更改:
- src/auth/login.js (新增)
- src/auth/register.js (新增)
- src/App.js (修改)

确认? (y/n): y
→ Rewind 执行中...
✓ 完成

创建备份快照

你: 在 Rewind 前创建备份

Claude:
✓ 已创建备份快照: snapshot_backup_001
→ 执行 Rewind...

[如果需要恢复]
你: 恢复到备份快照
→ 从 snapshot_backup_001 恢复
✓ 已恢复

比较快照

你: 比较快照 2 和快照 5

Claude:
📊 快照对比:2 vs 5
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

新增文件:
+ src/auth/login.js
+ src/auth/register.js
+ src/utils/api.js

修改文件:
M src/App.js
M src/index.css

删除文件:
- src/old-component.js

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
总计:3 新增,2 修改,1 删除

🎯 最佳实践

✅ DO - 应该做的

  1. 定期检查快照

    每完成一个重要功能后,查看快照
  2. 描述重要操作

    你: 添加用户认证功能(重要功能)
    [快照描述会更详细]
  3. 使用前确认

    rewind 前先看看会失去什么
  4. 配合 Git 使用

    Rewind 用于会话内,Git 用于版本控制

❌ DON'T - 避免做的

  1. ❌ 依赖 Rewind 替代 Git

    Git 用于长期版本控制
    Rewind 用于会话内临时回退
  2. ❌ 忘记当前状态

    Rewind 前先查看当前快照
  3. ❌ 跨会话 Rewind

    只能在当前会话内 Rewind

🔄 Rewind vs Git

特性RewindGit
作用范围当前会话完整历史
时间跨度会话时长无限
提交自动快照手动 commit
粒度操作级别提交级别
用途快速回退版本管理

最佳组合

1. 使用 Rewind 快速尝试和回退
2. 完成后提交到 Git
3. 开始新的会话阶段

🛠️ 高级用法

创建命名快照

你: 保存当前状态为"用户认证完成"

Claude:
✓ 已创建命名快照: "用户认证完成"
ID: snapshot_auth_complete
时间: 2024-03-15 14:30:00

[稍后]
你: 回到"用户认证完成"状态

Claude:
→ 恢复到 snapshot_auth_complete
✓ 已恢复

快照分支

你: 从当前快照创建分支

Claude:
✓ 已创建分支 branch_001
从快照 5 开始

[在 branch_001 上工作]
你: 尝试新的 UI 设计
[进行各种更改...]

[切换回主分支]
你: 切换回主分支
→ 恢复到主快照
✓ 已切换

[稍后]
你: 合并 branch_001 的更改

快照导出/导入

# 导出快照
你: 导出当前快照到文件

Claude:
✓ 已导出到: project-snapshot-2024-03-15.json

# 在另一个会话导入
你: 导入快照文件

Claude:
→ 读取 project-snapshot-2024-03-15.json
✓ 已恢复快照状态

📊 快照管理

清理旧快照

你: 清理 1 小时前的快照

Claude:
→ 删除快照 1-5
✓ 已释放 23MB 空间

设置快照策略

json
// ~/.claude/config.json
{
  "snapshot": {
    "enabled": true,
    "interval": "5m",        // 每 5 分钟自动快照
    "maxSnapshots": 50,       // 最多保存 50 个
    "maxAge": "24h",          // 最多保留 24 小时
    "maxSize": "500MB"        // 最大总大小
  }
}

🚨 注意事项

快照限制

  1. 文件大小限制

    单个快照最大 100MB
  2. 不包括的文件

    - node_modules/
    - .git/
    - 大型二进制文件
    - 环境变量
  3. 会话独立性

    不同会话的快照不共享

性能影响

快照频率设置:
- 高频 (1min): 更精确,但性能影响大
- 中频 (5min): 平衡,推荐
- 低频 (15min): 性能影响小,但粒度粗

🎓 使用场景决策树

需要撤销更改

    ├─ 更改是在当前会话吗?
    │   ├─ 是 → 使用 Rewind ✓
    │   └─ 否 → 使用 Git reset

    ├─ 需要保留分支吗?
    │   ├─ 是 → 创建快照分支
    │   └─ 否 → 直接 Rewind

    └─ 有多个可能的方案吗?
        ├─ 是 → 用快照分支尝试各方案
        └─ 否 → 直接 Rewind

📚 下一步

了解 Rewind 后,继续学习 10. 图片处理

🔗 相关资源


💡 API 推荐https://apipro.maynor1024.live/ - 一站式接入各种AI服务,注册即送0.2刀

基于 MIT 许可发布 | 永久导航