在使用 Claude Code 进行项目开发时,经常会遇到这样的场景:当前对话已经积累了大量上下文,此时想尝试一个不同的技术方案,又不想破坏现有的对话历史。--fork-session 参数正是为这种需求设计的。
会话管理基础
在了解分叉功能之前,先回顾一下 Claude Code 的会话恢复机制。
继续最近的会话
使用 --continue(简写 -c)可以加载当前目录中最近的对话:
claude --continue
claude -c这是最简单的恢复方式,适合中断后继续之前的工作。
恢复指定会话
如果你为会话设置了名称,可以用 --resume(简写 -r)通过名称恢复:
claude --resume auth-refactor
claude -r "auth-refactor"也可以在恢复时直接带上新的查询:
claude -r "auth-refactor" "Finish this PR"如果不指定会话名称或 ID,--resume 会显示一个交互式选择器,让你从历史会话中选择。
使用特定的会话 ID
每个会话都有一个唯一的 UUID,可以通过 --session-id 直接指定:
claude --session-id "550e8400-e29b-41d4-a716-446655440000"这在脚本化场景或需要精确控制会话时很有用。
会话分叉:fork-session
--fork-session 的作用是在恢复会话时创建一个新的会话 ID,而不是重用原始会话。这意味着原始会话保持不变,新的对话会在一个独立的分支中进行。
基础用法
从命名会话创建分叉:
claude --resume auth-refactor --fork-session从最近的会话创建分叉:
claude --continue --fork-session执行后,Claude Code 会加载原始会话的完整上下文,但后续的所有交互都会记录在新的会话中,原始会话的历史保持不变。
指定分叉后的会话 ID
默认情况下,分叉会自动生成一个新的 UUID。如果你需要使用特定的会话 ID(比如用于后续的脚本引用),可以结合 --session-id 参数:
claude --resume auth-refactor --fork-session --session-id "550e8400-e29b-41d4-a716-446655440000"这样分叉出的新会话就会使用你指定的 UUID。
实际应用场景
场景一:方案对比实验
假设你正在和 Claude 讨论一个性能优化问题,已经分析了代码结构和瓶颈。现在有两个可能的优化方向:
- 使用缓存策略
- 重构数据结构
你可以从当前会话分叉出两个独立的分支,分别探索不同的方案:
# 分叉探索缓存方案
claude --resume perf-analysis --fork-session
# 另一个终端,分叉探索重构方案
claude --resume perf-analysis --fork-session两个分支都继承了之前的分析上下文,但各自独立发展,互不影响。
场景二:保护稳定的对话历史
有时候你在一个会话中已经完成了核心功能的开发,现在想尝试一些实验性的改动。通过分叉,可以确保原始会话的历史不会被这些实验污染:
claude --resume feature-complete --fork-session如果实验失败,原始会话还在那里,可以随时回到稳定状态。
场景三:便于管理的自定义 ID
在团队协作或自动化流程中,使用可预测的会话 ID 可以简化管理:
# 使用自定义 UUID 便于追踪和引用
claude --resume main-task --fork-session --session-id "a1b2c3d4-e5f6-7890-abcd-ef1234567890"在脚本中可以预先生成并记录 UUID,方便后续通过 --resume 或 --session-id 引用。
参数速查表
| 参数 | 说明 |
|---|---|
--continue / -c | 加载当前目录中最近的对话 |
--resume / -r | 通过 ID 或名称恢复特定会话,或显示交互式选择器 |
--session-id | 使用特定的会话 ID(必须是有效 UUID) |
--fork-session | 恢复时创建新会话 ID,而非重用原始会话 |
总结
--fork-session 为 Claude Code 的会话管理提供了分支能力:
- 保留原始会话的完整历史
- 基于现有上下文创建独立的实验分支
- 支持自定义分叉后的会话 ID
对于需要进行方案对比、保护稳定历史或精细管理会话的场景,这个功能非常实用。