Skip to content

Claude Code 会话可以按名称、PR、会话 ID 或最近一次记录继续,也可以在 /resume 里切换、重命名、分支和导出。CLI 的会话历史按项目目录保存,/clear 只会清空当前上下文,不会删除可恢复的会话;/export 能把当前对话写成可读文本,转录文件默认在 ~/.claude/projects/<project>/<session-id>.jsonl

Claude Code 会话怎么继续、分支和导出

Claude Code 的会话是绑定到项目目录的本地保存对话。你可以在退出后继续上次对话,给会话命名方便检索,把当前对话分支成另一条路线,或者在不同任务之间切换。

桌面应用Claude Code on the webVS Code 扩展 都各自维护独立的会话历史。这里讲的是 CLI。

继续会话

会话会在你工作时持续保存到本地转录文件,所以即使退出或执行 /clear,之后也能继续。

可用入口如下:

命令作用
claude --continue继续当前目录里最近的一次会话
claude --resume打开会话选择器
claude --resume <name>直接继续指定名称的会话
claude --from-pr <number>继续与该 pull request 关联的会话
/resume在当前会话里切换到另一段对话

claude -pAgent SDK 创建的会话不会出现在会话选择器里,但你仍然可以通过把 session ID 传给 claude --resume <session-id> 来恢复它。

会话选择器会查哪些会话

会话按项目目录保存。默认情况下,会话选择器会显示当前 worktree 中的交互式会话,也会显示那些在别处启动、但通过 /add-dir 加入了当前目录的会话。按 Ctrl+W 可以扩大到当前仓库的所有 worktree,按 Ctrl+A 可以扩大到这台机器上的所有项目。

从同一仓库的另一个 worktree 里选中会话时,会在原位继续它。选中不相关项目里的会话时,系统会改为把 cd 和 resume 命令复制到剪贴板。

按名称恢复时,查找范围覆盖当前仓库及其 worktree。两种形式都会先找精确匹配,并直接恢复,即使它位于其他 worktree 里:

命令精确匹配名称有歧义时
claude --resume <name>直接继续打开会话选择器,并把名称预填为搜索词
/resume <name>直接继续报错;改用不带参数的 /resume 打开会话选择器

命名会话

给会话起一个描述性名字,方便在会话选择器里找到,也方便后续按名称恢复。并行处理多个任务时,这一点最有用。

时机设置方式
启动时claude -n auth-refactor
会话中/rename auth-refactor。名字也会显示在提示栏上
从会话选择器里选中会话后按 Ctrl+R
接受 plan 时plan mode 中接受计划时,会根据计划内容自动命名,除非你已经手动设置过名称

一旦会话被命名,就可以用 claude --resume <name>/resume <name> 回到它。关于名称在不同 worktree 中如何解析,见继续会话

使用会话选择器

在会话内运行 /resume,或者在命令行里执行不带参数的 claude --resume,都会打开交互式会话选择器。下面这些快捷键可以用来浏览、搜索和扩大列表范围:

快捷键操作
/ 在会话之间移动
/ 展开或折叠分组会话
Enter继续当前高亮的会话
Space预览会话内容。某些不会把 Ctrl+V 识别成粘贴的终端也可用 Ctrl+V
Ctrl+R重命名当前高亮会话
/ 或任意可打印字符(Space 除外)进入搜索模式并过滤会话。也可以粘贴 GitHub、GitHub Enterprise、GitLab 或 Bitbucket 的 pull request / merge request URL 来查找创建它的会话
Ctrl+A显示这台机器上所有项目的会话。再按一次返回当前仓库
Ctrl+W显示当前仓库所有 worktree 的会话。再按一次返回当前 worktree。仅在多 worktree 仓库里显示
Ctrl+B只筛选当前 git 分支上的会话。再按一次显示所有分支
Esc退出会话选择器或搜索模式

每一行会显示会话名称;如果没有命名,则显示对话摘要或第一条提示词,同时显示最近活动时间、消息数量和 git 分支。按 Ctrl+A 扩大到所有项目后,还会显示项目路径。

/branch/rewind--fork-session 创建的分支会话,会按根会话分组显示。按 可以展开这一组。

分支会话

分支会把当前对话复制一份,并切换到这份副本,原会话保持不变。适合在不丢掉原路线的情况下试另一种方案。

在会话里运行带可选名称的 /branch

text
/branch try-streaming-approach

在命令行里,把 --continue--resume--fork-session 一起使用:

bash
claude --continue --fork-session

原会话不会被修改,仍然可以在会话选择器里找到。执行 /branch 后,确认信息会打印两个 session ID:一个是你现在进入的新分支,另一个是原会话。要回到原会话,可以把原 session ID 传给 /resume,也可以用会话选择器,或者运行 /resume <original-name>

你用“allow for this session”批准的权限,不会带到新分支里。若不 fork 而是在两个终端里继续同一个会话,两个终端发出的消息会交错写进同一份转录。

如果你要在单个会话里按检查点回退,见 Checkpointing

管理会话内的上下文

这些命令只控制上下文窗口里的内容,不会离开当前会话:

  • /clear:用空上下文重新开始。之前的对话会被保存,之后仍可恢复
  • /compact [instructions]:把历史压缩成摘要,也可以指定希望摘要重点关注的内容
  • /context:显示当前有哪些内容在占用上下文

关于压缩如何与 CLAUDE.md、技能和规则一起工作,见 context window guide。关于什么时候该清空、什么时候该压缩,见 best practices

导出和定位会话数据

运行 /export 可以把当前对话复制到剪贴板,或者保存成纯文本文件,消息和工具输出都会转成可读文本。你也可以传入文件名,直接写到那个文件里。

转录会以 JSONL 格式存储在 ~/.claude/projects/<project>/<session-id>.jsonl,其中 <project> 由你的工作目录路径派生得到。每一行都是一个 JSON 对象,表示一条消息、一次工具调用或一条元数据。要把会话存到 ~/.claude 以外的位置,可以设置 CLAUDE_CONFIG_DIR。这些本地文件默认会在 30 天后删除;可通过 cleanupPeriodDays 修改。

如果要完全禁止写入转录,设置 CLAUDE_CODE_SKIP_PROMPT_HISTORY;在非交互模式下则使用 --no-session-persistence

相关页面

这些页面覆盖了与会话和并行执行有关的其他机制:

常见问题

claude --resume 找不到我刚才的会话,为什么?

先确认你当前所在目录还是原来的项目目录。会话按项目目录存储,切到别的项目后,claude --resume 看到的是另一组历史。

/resume <name> 提示名称有歧义怎么办?

这种情况说明当前仓库或 worktree 里有多个同名会话。直接运行不带参数的 /resume,让会话选择器帮你选中具体那一条。

/clear 会删除会话记录吗?

不会。/clear 只是清空当前上下文窗口,之前的对话仍会保存为可恢复的会话。