09. 版本回滚 (Rewind)
Rewind 功能让你能够回退到之前的会话状态,就像时光倒流一样。
🎯 什么是 Rewind?
核心概念
时间线:
过去 ←←← 现在 →→→ 未来
t-30m t-20m t-10m 现在
│ │ │ │
状态A 状态B 状态C 状态D
Rewind 让你回到:
状态A、B 或 C 中的任何一个🕐 为什么需要 Rewind?
常见场景
误操作恢复
删除了重要文件 → Rewind 回到 5 分钟前尝试失败
尝试新方案不work → Rewind 回到尝试前分支探索
想尝试不同方案 → Rewind 到起点,选择不同路径意外中断
会话意外关闭 → 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 - 应该做的
定期检查快照
每完成一个重要功能后,查看快照描述重要操作
你: 添加用户认证功能(重要功能) [快照描述会更详细]使用前确认
rewind 前先看看会失去什么配合 Git 使用
Rewind 用于会话内,Git 用于版本控制
❌ DON'T - 避免做的
❌ 依赖 Rewind 替代 Git
Git 用于长期版本控制 Rewind 用于会话内临时回退❌ 忘记当前状态
Rewind 前先查看当前快照❌ 跨会话 Rewind
只能在当前会话内 Rewind
🔄 Rewind vs Git
| 特性 | Rewind | Git |
|---|---|---|
| 作用范围 | 当前会话 | 完整历史 |
| 时间跨度 | 会话时长 | 无限 |
| 提交 | 自动快照 | 手动 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" // 最大总大小
}
}🚨 注意事项
快照限制
文件大小限制
单个快照最大 100MB不包括的文件
- node_modules/ - .git/ - 大型二进制文件 - 环境变量会话独立性
不同会话的快照不共享
性能影响
快照频率设置:
- 高频 (1min): 更精确,但性能影响大
- 中频 (5min): 平衡,推荐
- 低频 (15min): 性能影响小,但粒度粗🎓 使用场景决策树
需要撤销更改
│
├─ 更改是在当前会话吗?
│ ├─ 是 → 使用 Rewind ✓
│ └─ 否 → 使用 Git reset
│
├─ 需要保留分支吗?
│ ├─ 是 → 创建快照分支
│ └─ 否 → 直接 Rewind
│
└─ 有多个可能的方案吗?
├─ 是 → 用快照分支尝试各方案
└─ 否 → 直接 Rewind📚 下一步
了解 Rewind 后,继续学习 10. 图片处理
🔗 相关资源
💡 API 推荐:https://apipro.maynor1024.live/ - 一站式接入各种AI服务,注册即送0.2刀