---
title: "`claude -r` — 按 ID 恢复会话"
description: "同时推进多条任务时，用会话编号精确回到某一条对话：编号从哪里找、恢复前后各核对什么、旧会话里哪些东西不能当真。"
updated: 2026-11-13
canonical: https://docai.cc/learn/resume-session-by-id/
markdown_mirror: https://docai.cc/learn/resume-session-by-id.md
---
## 当「最近一次」不够用

上午修登录，下午查构建，第二天要回上午那条线。这时 `claude -c` 可能把你送进下午的对话，因为它只认最近一次。按编号恢复解决的正是这个歧义：每个会话都有唯一标识，指定它，就精确落到那一条。

如果你只有一条线，按最近一次继续就够，见[继续最近对话](/learn/continue-last-conversation/)。线一多，编号才是可靠的路标。

## 编号在哪里找

最省事的入口是 `claude -r` 不带编号：当前版本会打开会话选择器，输入关键词过滤，方向键选中后回车。也可以直接在命令后跟编号或名称。

```bash
claude -r 7f3a9c2e
```

这串字符只是示意，别照抄。长写法是 `--resume`，效果一样。会话记录保存在用户目录的 `.claude/projects` 下，按项目分目录，文件名通常就是会话编号；目录结构各版本可能调整，找不到时以 `claude -r` 的列表为准。在会话里输入 `/resume` 也能回到选择器。

列表里通常显示开头几句或自动生成的标题，任务相似时很容易看错，所以别只靠它辨认。先确认它属于哪个任务，再看目录。

## 恢复前：先对目录

会话和项目绑在一起。进错目录再恢复，它面对的是另一套文件，之前聊的路径全对不上。先跑 `pwd` 和 `git branch`，确认分支与任务一致。

最稳的做法是先进入项目根目录再启动；要临时访问项目外的目录，可以用 `--add-dir` 把它加进来，具体写法以 `claude --help` 为准。

路径也要对。项目根目录和子目录启动，默认能读写的范围不同；上一级的 CLAUDE.md 会加载，但相对路径和命令都以当前目录为基准。拿不准就在项目根启动，不要从无关目录恢复。

## 恢复后：别信口头汇报

恢复的是对话记录，不是文件快照。上次停在权限确认，或你在别处改过代码，磁盘状态都可能和它以为的不同。

先让它复述：

> 这条会话最后改到哪一步？涉及哪些文件？下一步准备做什么？先不要执行命令。

再自己核对 `git status` 和 `git diff`。它说「已经改完」，你看到工作区干净，才算真的完成。

如果它要接着改代码，先让它重读相关文件再动手。隔了一夜，文件可能已经被你或同事改过，凭对话里的旧印象直接编辑，冲突就来了。

## 把编号变成索引

编号本身没有意义，两天后就认不出。记录时带三样：日期、任务、分支。例如「1113 登录修复 / fix-login」。放在待办或任务系统备注里，几条线并行时就是索引。记录不必复杂，一行字就够，关键是当天写完，别等周末再回忆。

列表里的标题多是系统自动生成的摘要，不一定准确。别指望靠它认任务，记录仍要自己写。团队共用一台机器时，退出前想一下会话里有没有不该留下的内容。

会话攒多了要清理。结论已经进代码或文档的，可以不留；共享电脑上注意，对话里可能有路径、配置片段，编号别随手发到公开频道。

## 什么时候不如新开一条

会话很长时，恢复后前几轮又慢又费。只是接着做最后一步，新开一条、把结论和约束贴进去，常常更划算。编号的另一个用途是查证历史，不一定非要续着跑。

还有一个信号：你发现自己在恢复后花很多时间解释「现在是什么情况」。这说明旧上下文已经成了负担，不如把结论压缩成几行，开一条干净的线。上下文越长，越容易把无关的旧结论带进来，见[上下文窗口](/concepts/context-window/)。

恢复带来的是上下文，权限模式通常也会跟着回来：在终端里用 `claude -r` 恢复时，会话原来在什么模式，回来大多还是什么模式，可以用 `--permission-mode` 覆盖。一次性的批准只对当时那次调用有效，不会自动变成长期规则。

多条线互不打扰之后，下一步是把重复动作写成脚本：[脚本编写](/learn/scripting-with-claude-code/)。
