<!-- title: 上下文不丢：会话续跑入门 -->
# 上下文不丢：Claude Code 会话续跑入门

## 概述

本教程面向已经装好 Claude Code、跑通过一次对话，却卡在"关掉终端、第二天回来怎么接着干"的零基础用户。你将学会用 `--continue`、`--resume` 一键续接历史会话，用 session ID 精确定位，用 `/compact`、`/clear`、`/rewind`、`/branch` 四招管理上下文，确保长任务不丢进度、不走偏方向。学完后你能在多天、多任务的真实开发中，把 Claude Code 当成一个"记得昨天聊到哪"的稳定搭档。

## 前置条件

- 已安装 Claude Code（`claude --version` 能输出版本号，建议 2.1.x，2026 年 6 月版）
- 跑通过至少一次交互式会话（输入过 `claude` 进入过对话）
- 有一个用来练习的项目目录（本文用一个 Python 小工具演示，不强制要求会 Python）
- 会基本的命令行操作：`cd` 切目录、`ls` 看文件

> 关键认知：Claude Code 把每一次对话当作一个**会话（session）**保存到本地，按"项目目录"分组。只要目录不变、记录没清，你就能随时回到任意一次对话继续。理解这一点，本文的内容就顺理成章。

---

## 第一步：先看清"会话"到底是什么

很多新手以为关闭终端 = 对话清空，于是第二天只能把昨天的需求重新描述一遍——这是最大的误解。

Claude Code 在本地为每个项目目录维护一份会话历史，结构大致是：

```text
~/.claude/projects/<目录路径转义>/
├── <session-id-1>.jsonl   # 一次完整对话的所有消息
├── <session-id-2>.jsonl
└── ...
```

- 目录路径会把 `/`、`\` 转成 `-`，所以你在 `/home/gprshome/todo` 里的会话，和 `/home/gprshome/blog` 里的会话是**分开存放、互不串扰**的。
- 每条 `.jsonl` 文件名就是 **session ID**，是一个唯一标识符，例如 `a1b2c3d4-...`。
- 会话里记录了你说过的每一句、Claude 的每一次回复、调用过的工具、改过的文件。

**预期结果**：在任意项目目录执行 `ls ~/.claude/projects/`，能看到一串以路径命名的文件夹；进入对应文件夹能看到若干 `.jsonl`。只要这里有文件，就一定能续跑。

**常见问题**：
- *Q：换了一台电脑，会话还在吗？* A：不在。会话存在本地磁盘，不随账号自动同步。要做迁移需手动拷贝 `~/.claude/projects/` 下对应目录。
- *Q：会话占空间吗？* A：单次几十 KB 到几 MB，长期累积可定期清理无用的 `.jsonl`。

---

## 第二步：`--continue` 一键续接最近的会话

最常用的续跑方式，只有一个字母。

```bash
cd ~/todo
claude -c          # 等价于 claude --continue
```

**操作说明**：`-c`（`--continue` 的缩写）会在**当前目录**里找到**最近一次**会话，直接带着完整上下文进入对话。你不用再解释项目背景，直接说"接着把昨天那个删除功能写完"即可。

**预期结果**：进入交互界面后，提示符下方会显示恢复的会话摘要（如"Resumed conversation"），Claude 立刻能接上之前的文件状态和讨论。

**常见问题**：
- *Q：报错说找不到会话？* A：`-c` 严格依赖"当前目录"。必须在**和昨天同一个目录**下执行，跨目录是找不到的。用 `pwd` 确认当前路径。
- *Q：我不想续最近的，想续更早的一次怎么办？* A：用下一步的 `--resume`，它提供选择列表。

---

## 第三步：`--resume` 从会话列表里挑一个

当你同时推进多个任务、或想翻回头改几天前的某个分支时，`-c` 就不够用了。

```bash
cd ~/todo
claude -r          # 等价于 claude --resume
```

**操作说明**：`-r` 会弹出一个**交互式会话选择器**，列出当前目录下的历史会话。每一行通常显示：会话名称（若设置过）、否则显示对话摘要或第一句话，以及对应的 session ID 和时间。用方向键上下移动、回车选中。

如果你已经知道目标 session ID（比如从 `.jsonl` 文件名里复制来的），可以跳过选择器直接续：

```bash
claude --resume a1b2c3d4-5678-...
```

**预期结果**：屏幕上出现一列历史会话，选中后进入该会话，上下文与当时的最后一刻完全一致。

**常见问题**：
- *Q：列表里全是"第一句话"，分不清哪个是哪个？* A：养成**给关键会话起名**的习惯。Claude Code 支持为会话设置名称，设置过的会话在选择器里会优先显示名字而非摘要，一眼就能认出。
- *Q：session ID 太长记不住？* A：不必记全。复制 `.jsonl` 文件名粘贴即可；或在交互中靠摘要+时间定位。

---

## 第四步：实战——两天接力做完一个小工具

下面是一个完整、可复现的练习，把前面三步串起来。目标：用 Python 写一个命令行待办工具 `todo.py`，分两天完成。

**第一天**（在一个干净目录里开始）：

```bash
mkdir -p ~/todo && cd ~/todo
claude
```

进入后输入：

```text
帮我创建 todo.py，先实现 add 和 list 两个子命令：add 往 tasks.json 追加一条待办，list 打印所有待办。用标准库 json 即可。
```

Claude 会创建 `todo.py` 和示例 `tasks.json`。试跑：

```bash
python3 todo.py add "买菜"
python3 todo.py add "写周报"
python3 todo.py list
```

看到两条待办输出后，**直接关闭终端**（模拟下班）。

**第二天**（模拟续班）：

```bash
cd ~/todo
claude -c
```

进入后输入：

```text
接着昨天的 todo.py，新增 done 子命令，把指定序号的待办标记为完成；list 时已完成项前面打 [x]，未完成打 [ ]。
```

Claude 会**记得**昨天用的是 `tasks.json`、字段结构、`add/list` 的实现方式，直接给出 `done` 实现，而不会推翻重写。这就体现了"上下文不丢"的价值。

**预期结果**：第二天 `list` 输出变成：

```text
[ ] 买菜
[x] 写周报
```

**关键体会**：如果没有 `-c`，第二天 Claude 会把 `todo.py` 当全新项目对待，很可能换一套数据结构、改字段名，反而把昨天能跑的代码改坏。续跑的本质是"保持前后认知一致"。

---

## 第五步：上下文快满了——`/compact` 压缩而不丢失

随着对话变长，上下文窗口会被塞满。Claude Code 在接近上限时会提示你。这时有两个选择，其中更推荐 `/compact`。

在交互界面里直接输入：

```text
/compact
```

**操作说明**：`/compact` 会把此前的对话**压缩成一份摘要**，替换掉冗长的原始消息，腾出上下文空间，同时**保留关键决策**（比如已确定的技术方案、改过的文件）。你也可以带一句指引，告诉它压缩时务必留下什么：

```text
/compact 保留 todo.py 的命令行参数设计和已完成的 done 逻辑，丢弃中间的试错过程
```

**预期结果**：界面提示上下文已压缩，剩余 token 数明显回升，对话继续。Claude 仍记得项目核心约定，但"忘掉"了无关的来回试探。

**与 `/clear` 的区别（重要）**：

| 命令 | 效果 | 适用场景 |
|------|------|----------|
| `/compact` | 压缩摘要，**保留**要点 | 同一任务继续做，只是太长了 |
| `/clear` | **清空**上下文，从零开始 | 换一个完全不相关的任务 |

**常见问题**：
- *Q：压缩后 Claude 把某个关键约定忘了？* A：下次带更明确的指引，把"务必保留 X"写进 `/compact` 后面；或把重要约定写进项目记忆 `CLAUDE.md`，让它每次自动加载，不依赖上下文。
- *Q：能不能自动压缩？* A：接近上限时 Claude Code 会给出提示，建议手动执行以便你掌控保留内容。

---

## 第六步：走偏了——`/rewind` 回退到正确的一步

有时 Claude 走错方向（比如误删了一段你想保留的代码），或你给了个糟糕的指令。不要硬拽，直接回退。

在交互界面输入：

```text
/rewind
```

**操作说明**：`/rewind`（部分版本也可用连按两次 `Esc`）会把对话回退到更早的某一步，撤销那一步之后的消息与文件改动，让你从干净的岔路口重新来过。你可以选择回退多少步。

**预期结果**：对话和被改坏的文件恢复到回退点的状态，你可以重新下达指令。

**与 `/clear` 的区别**：`/clear` 是"全清重来"，`/rewind` 是"只倒带几步"。走偏一点用 `/rewind`，方向完全错了才用 `/clear`。

**常见问题**：
- *Q：文件已经被改坏了，/rewind 能救回吗？* A：能。Claude Code 在会话里记录了文件改动轨迹，回退会一并恢复。但**不依赖 Claude Code 的外部改动**（你手动改的、或别的工具改的）不会自动回滚，重要文件仍建议用 git 兜底。

---

## 第七步：想试另一条路——`/branch` 分叉而不破坏原会话

做架构决策时常想"如果不这么做、换种方案会怎样"。直接在原会话里改，会把原来的方案搅乱。正确做法是**分叉**。

```text
/branch
```

或启动时用 CLI 参数：

```bash
claude --fork
```

**操作说明**：`/branch`（也叫 fork session）会基于当前会话**复制出一个新会话**，原会话原封不动。你在分叉里大胆尝试方案 B，不满意就回原会话继续方案 A，互不影响。

**预期结果**：分叉后得到一个独立的新会话，选择器里能看到原会话和分叉会话并存。

**常见问题**：
- *Q：分叉会占用双倍空间吗？* A：会话以 JSONL 记录，分叉是新的记录文件，体积可接受；试完不需要的分叉可删除对应 `.jsonl`。
- *Q：2026 年的新工具 `/btw` 是什么？* A：自 v2.1.72（2026 年 3 月）起，Claude Code 引入 `/btw`，用于"顺手补充一句旁白"（比如临时问一个无关小问题）而**不污染主线上下文**。它和 `/branch` 同属"上下文卫生（context hygiene）"工具族，适合在意上下文纯净度的进阶用户。

---

## 第八步：会话生命周期全流程

把上面八招放到一张图里，你就拥有了完整的"上下文不丢"心智模型：

```mermaid
flowchart TD
    A[启动 claude] --> B{带参数?}
    B -->|claude 无参数| C[全新会话]
    B -->|claude -c| D[续最近会话]
    B -->|claude -r| E[选择器挑历史会话]
    B -->|claude -r ID| F[直续指定 session]

    C --> G[正常对话]
    D --> G
    E --> G
    F --> G

    G --> H{遇到问题?}
    H -->|上下文将满| I["/compact 压缩摘要"]
    H -->|走偏几步| J["/rewind 倒带"]
    H -->|想试方案B| K["/branch 分叉"]
    H -->|换不相关任务| L["/clear 全清重来"]
    H -->|顺利推进| G

    I --> G
    J --> G
    K --> M[独立新会话继续探索]
    L --> C

    G --> N[关闭终端]
    N --> O[第二天: cd 同目录 + claude -c]
    O --> D
```

记住这张图的三个出口：**满了用 compact、错了用 rewind、换路用 branch、换事用 clear**，外加**关机用 continue、找旧的用 resume**，六招即覆盖 95% 的日常场景。

---

## 常见误区速查表

| 误区 | 正解 |
|------|------|
| 关掉终端对话就没了 | 会话存本地，`cd` 回原目录 `claude -c` 即可续 |
| 第二天重新描述需求 | 用 `-c`/`-r`，让 Claude 接着昨天的状态干 |
| 上下文满了直接 `/clear` | 多数情况该用 `/compact`，保留要点 |
| 文件被改坏只能手抄恢复 | 先试 `/rewind` 倒带回退 |
| 试新方案在原会话里乱改 | 用 `/branch` 分叉，保护主线 |
| 不给会话起名，列表全是第一句话 | 给关键会话命名，便于日后辨认 |

---

## 实战案例验收标准

回到第四步的 `todo.py` 练习，用以下清单自测你是否真正掌握：

1. 能用 `claude -r` 在选择器里找到第一天的会话并选中。
2. 能用 `claude -c` 续接并让 Claude 记得 `tasks.json` 的结构。
3. 在一个长会话中触发 `/compact`，并验证压缩后 Claude 仍记得命令行参数设计。
4. 故意让 Claude 改坏 `todo.py`，用 `/rewind` 恢复。
5. 用 `/branch` 开一个分叉，尝试把存储从 JSON 换成 SQLite，验证原会话未被影响。

全部跑通，说明你已从"会启动 Claude Code"升级到"会管理 Claude Code 的记忆"。

---

## 延伸阅读

- **官方会话管理文档**：<https://code.claude.com/docs/en/sessions> —— `--continue`、`--resume`、fork 的权威说明
- **项目记忆 CLAUDE.md**：把"务必保留"的约定写进 `CLAUDE.md`，让上下文压缩也丢不了核心约束
- **斜杠命令全景图**：`/compact`、`/clear`、`/rewind`、`/branch`、`/btw` 只是冰山一角，输入 `/` 可看完整列表
- **会话历史搜索**：在 `~/.claude/projects/` 下用文本搜索跨会话定位关键词
- **1M 上下文窗口**：配合合适的订阅计划，长任务可承载更多上下文，但仍建议主动用 `/compact` 管理

## 训练营适用性评估

- **适合训练营类型**：Claude Code 零基础入门营、AI 编程工具上手营、前端/后端新人提效营
- **前置衔接**：建议排在"安装与首次运行"之后、"CLAUDE.md 项目记忆"之前，作为"让 AI 记住你"的承上启下章节
- **预计教学时长**：1.5–2 小时（含第四步实战演练与验收清单）
- **难度**：⭐⭐（入门偏实操，无编程门槛，但需要命令行基础）
- **教学建议**：务必让学员亲手"关掉终端再 `-c` 续上"，这一刻的体感比任何讲解都有效；可设置"故意把代码改坏，用 rewind 救回"的彩蛋环节增强记忆

## 参考来源

1. [Manage sessions — Claude Code Docs](https://code.claude.com/docs/en/sessions) — Anthropic 官方会话管理文档，覆盖 `--continue`、`--resume`、session ID 与分叉的权威定义
2. [Claude Code Session Management: /clear, /compact, and /rewind Explained](https://docs.bswen.com/blog/2026-03-25-claude-code-session-commands/) — 详解四条核心上下文命令的区别与使用时机
3. [How to resume, search, and manage Claude Code conversations](https://kentgigger.com/posts/claude-code-conversation-history) — 实操向指南，含 `--resume` 选择器与会话历史检索技巧
4. [Mastering Claude Code's /btw, /fork, and /rewind: The Context Hygiene Toolkit](https://pub.towardsai.net/mastering-claude-codes-btw-fork-and-rewind-the-context-hygiene-toolkit-5ceffa59623d) — 解读 2026 年 3 月 v2.1.72 引入的 `/btw` 与分叉、回退工具族
5. [Claude Code 2.1 Cheatsheet (Updated 2026)](https://awesomeclaude.ai/code-cheatsheet) — 2026 年 6 月更新的命令速查表，含全部斜杠命令与 CLI 参数对照

> [!tip] 51学通信知识星球
> **星主：爱卫生**（微信：gprshome201101）——公众号「51学通信」创办者，19 年通信行业运维与讲师经验，著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书（各大电商平台有售）。
> **星球定位**：深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域，主打运维岗位与信令分析。
> **当前规模**：5200 篇主题 / 990 个回答，198 元/年。
> **加入福利**：加入星球后请加爱卫生微信，拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题，另有群内分享。
> **AI 加持**：51学通信知识星球已作为 skill 接入 WorkBuddy，使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例，做总结、找文档和 PPT 等场景全覆盖。

![51学通信知识星球海报-扫码加入](https://wiki.500nian.com/images/zhixingqiu_qrcode.png)
