---
title: "第 3 周上机手册：数据简报与投资研报的版本记录"
---

# 🧭 第 3 周上机手册：数据简报与投资研报的版本记录

本周两个练习。第一个是主任务：建一个项目文件夹，用你选定的材料做一份含图表的 HTML 简报，边做边用 Git 记录版本。做完之后，这个项目里会有：几个按内容命名的子文件夹、一份任务说明和项目规则、一份能在浏览器里打开的简报，以及一条能念出来的版本记录：初始化 → 任务说明 → 初版 → 修订 → 试改 → 撤销 → 交接。第二个练习是投资研报的 Git 管理：拿到一个已有初稿的项目，自己开启版本记录，分步提交，再用 `revert` 撤销其中一步，见本手册“第二个练习”。

**材料三选一，自己定。** ① 自选主题与材料；② 正在上的某门课，选一章，做成“如果你是老师来讲这一章”的讲解课件；③ 没有想法就用给定的实习岗位样本材料包。三种做法步骤相同，手册的示例用第 ③ 种：一份约 150 条岗位的数据表（公司类型、城市、岗位类别、月薪区间、要求技能……），加两页背景和一页口径说明，做成 6–8 页的简报，至少 3 张图，图里的每个数字都能在数据表里对上。数据、机构和背景都是教学模拟材料。选 ①② 的，把“数据表”换成你自己的材料读下去即可，各步有专门的说明。

第 2 周的做法是改一版另存一个 `_v2`。这次不再另存：改动直接改在同一个文件上，旧版本由 Git 保管，想看、想比、想退都从版本记录里取。

## 开始之前

### 配置 Git

打开终端（Windows 用 Git Bash 或 PowerShell，Mac 用“终端”），逐条运行：

```bash
git --version
git config --global user.name "你的名字"
git config --global user.email "你的邮箱"
git config --global init.defaultBranch main
git config --global core.quotepath false
```

- 第一条应显示 `git version 2.xx`。显示“不是内部或外部命令”的，见《常见问题》第 2 条。
- 后四条运行后没有输出就是成功。名字和邮箱写进每一条版本记录，用来标明“这条记录是谁写的”；中英文都行。
- 第四条让新建的仓库默认叫 `main`；第五条让 `git status` 里的中文文件名正常显示，不然会显示成 `"\346\225\260\346\215\256..."`。本周的文件夹和文件都用中文名，这一条不能省。

运行 `git config --global --list`，能看到刚才设的四项即可。

### 先定材料

三选一，定了再往下走。三种材料在项目里放的位置不同，原始资料文件夹的名字也随材料起（起名原则见第一步）。

| 选项 | 原始资料文件夹放什么 | `口径与要求/` 放什么 | 第四步核什么 |
| --- | --- | --- | --- |
| ① 自选主题与材料 | 你自己找的资料、数据（文件夹名按内容起，例如 `校园消费数据/`） | 材料包 `01_数据简报/口径与要求/简报要求.md`；有统计口径的自己写一份口径说明 | 一张图的数字，或一处定义、结论的出处 |
| ② 某门课的一章，做讲解课件 | 老师的课件、教材章节、你的笔记（文件夹名例如 `课程原始资料/`） | 同上的 `简报要求.md` | 一处定义、公式或例题是否与教材一致 |
| ③ 实习岗位样本材料包 | 材料包 `01_数据简报/岗位样本数据/` 里的数据表和两份背景（文件夹名 `岗位样本数据/`） | 材料包 `01_数据简报/口径与要求/` 里的口径说明和简报要求 | 一张图的数字；口径说明里“面议”和“重复发布”两条 |

**隐私与版权。** 课程资料是老师的材料，只放在你自己电脑的原始资料文件夹里。白名单 `.gitignore` 把这个文件夹挡在仓库外，所以它不会进版本记录；成品课件里也不要整段复制老师课件的原文，引用要点并标出来源文件即可。选 ① 的资料同样只放本机。

### 材料包与项目文件夹

- 下载[本周材料包](/course-materials/2026-autumn/w03/w03-materials-pack.zip)，解压到桌面或下载文件夹。**不要解压到项目文件夹里面**，后面按步骤把需要的文件复制进去。材料包保留一份不动，改坏了可以重新复制。
- 项目文件夹放在哪里由你自己定：桌面、文档，或第 1 周建的练习文件夹都可以。一个任务一个项目文件夹，在项目文件夹里启动 `claude`。本手册用 `实习岗位简报/` 作示例名。
- 第 1 周的环境能用：在任意文件夹运行 `claude` 能对话。

| 材料包目录 | 用途 | 用在哪一步 |
| --- | --- | --- |
| `01_数据简报/岗位样本数据/` | 数据表 `实习岗位样本_2026春.csv`，两份背景资料（选 ③ 用） | 第一步 |
| `01_数据简报/口径与要求/` | `口径说明.md`（怎么数，选 ③ 用）、`简报要求.md`（成品长什么样，三种都用） | 第一、二、四步 |
| `01_数据简报/模板/` | 任务说明、`CLAUDE.md`、`.gitignore` 白名单、检查记录、决策日志、README 的模板 | 第一、二、四、六步 |
| `01_数据简报/材料包说明.md` | 材料包的总说明 | 随时 |
| `02_投资研报/` | 第二个练习：已有初稿的研报项目，自己开启版本记录、分步提交、`revert` | 第二个练习 |
| `03_迁移主题/` | 换一个主题再做一遍：社团活动与经费 | 进阶 |
| `04_回退练习/` | 两个现成的小仓库：只恢复误删的一节；说出四种文件状态 | 进阶 |

### 两种看法，一个做法

看状态、看差异、看历史有两种看法；所有改动仓库的动作（开启版本记录、提交、回退）都让 Claude Code 做、由你审批。本课不用面板做提交、暂存、放弃更改。

| 路径 | 用来做什么 | 怎么打开 |
| --- | --- | --- |
| VS Code 源代码管理面板 | 看状态、看差异、看历史 | 用 VS Code“文件 → 打开文件夹”打开项目文件夹；左侧活动栏点“源代码管理”图标，或按 `Ctrl+Shift+G`（Mac 也是这个组合）。资源管理器底部的“时间线”看单个文件的历史 |
| 三条只读命令 | `git status`（现在改了什么）、`git log --oneline`（提交历史，一行一条）、`git diff`（改了哪些行） | 不要求手打。你对 Claude Code 说“看看改了什么”“看看历史”“看看差异”时，它在后台跑的就是这三条，会把结果念给你。手册里凡是写到这三条命令的地方，都是让它跑、你看结果，命令名留着供你对照它的报告 |
| Claude Code | 开启版本记录、提交、回退 | 在项目文件夹里直接运行 `claude`，默认就是手动逐次审批：`git commit`、`git revert` 这类会改东西的命令每次都会先问你；`git status`、`git log`、`git diff` 它直接跑 |

面板的译名以你屏幕上显示的为准：本手册写“源代码管理”“打开更改”“时间线”“源代码管理图”。面板里的“初始化仓库”“暂存更改”“提交”“放弃更改”按钮本课不用；看到它们不要点，让 Claude Code 做、你审批，练的是看它的报告再放行。

**同一个项目文件夹不要同时开两个 Claude Code 会话**，两个会话会互相覆盖对方的改动。

每一步后面有“✅ 自查”，写这一步做完应看到什么，包括 `git log --oneline` 应有几行、`git status` 应是什么样。自查里的命令都让 Claude Code 跑并把结果念给你，或在面板里看。多提交了一次没有关系，行数只多不少。


### 术语对照：中文、英文、在哪里会看到

Claude Code 的回报、`git status` 的输出和 VS Code 面板里会出现英文术语，对照着认一遍，以后看到不慌。

| 中文 | 英文 | 在哪里会看到 |
| --- | --- | --- |
| 仓库 | repository，简称 repo | Claude Code 回报“已初始化仓库”；`.git/` 就是仓库本身 |
| 工作区 | working directory／working tree | 你正在改的文件夹本身 |
| 暂存区 | staging area／index | 面板“暂存的更改”（Staged Changes）；`git status` 里“Changes to be committed” |
| 提交、提交点 | commit | 历史图里的每一个点；Claude Code 回报“已提交 `a1b2c3d`” |
| 哈希 | hash | 提交后面那串 7 位字母数字，是提交的编号 |
| 当前位置 | HEAD | `git status` 第一行；历史图里标记最新提交 |
| 分支、主线 | branch、main | `git status` 第一行“On branch main” |
| 状态 | status | `git status`；面板“更改”列表 |
| 差异 | diff | `git diff`；面板点文件“打开更改”看到的红绿对照 |
| 历史 | log／history | `git log --oneline`；面板“源代码管理图”（Source Control Graph）与“时间线”（Timeline） |
| 未跟踪 | untracked | `git status` 里“Untracked files”；面板文件后标 `U` |
| 已修改 | modified | `git status` 里“modified:”；面板文件后标 `M` |
| 已暂存 | staged | 面板“暂存的更改”一组 |
| 被忽略 | ignored | `.gitignore` 挡住的文件；面板里不出现 |
| 丢弃更改 | restore／discard changes | 回退第一层；面板叫“放弃更改”（本课不用面板做） |
| 取回旧版本 | restore --source | 回退第二层 |
| 撤销提交 | revert | 回退第三层；历史里多一条 `Revert "…"` |
| 开启版本记录 | init（`git init`） | Claude Code 回报“已初始化空仓库” |
| 放进暂存区 | add／stage | Claude Code 请你批准 `git add`；面板“暂存更改”按钮（本课不用面板做） |
| 提交 | commit（`git commit -m "说明"`） | Claude Code 请你批准 `git commit` |
| 远端、推送、拉取、克隆 | remote、push、pull、clone | 把仓库放到 GitHub 一类远端时才用到，本课不涉及；看到 `git push` 的提示不用理 |
| 工作树 | worktree | 同一仓库在另一个文件夹再放一份工作区，以后详讲 |
| 检查点 | checkpoint | Claude Code 会话自带的回退点（`/rewind`），不是 Git 的提交 |

---

## 第一步：建项目、给文件夹起名、开启版本记录

### 学生做什么

1. 新建项目文件夹（示例名 `实习岗位简报/`），用 VS Code“文件 → 打开文件夹”打开它。在 VS Code 终端里（菜单“终端 → 新建终端”）启动：

   ```bash
   claude
   ```

   不带参数，默认就是手动逐次审批。界面底部不显示 `accept edits`、`plan`、`auto` 一类模式提示就是手动审批；显示了就按 `Shift+Tab` 切换到不显示为止。

2. **给文件夹起名。** 第 2 周用的 `inputs/`、`outputs/` 是课上的例子，不是规定。这次按项目自己的内容起名，短而自明：看名字就知道这个文件夹是什么、范围有多大、操作原则是什么（只读、可改、进不进仓库）、里面大概是哪类文件，智能体看到名字就知道该读还是不该读。中文项目用中文名。三个例子：

   | 项目 | 文件夹 | 范围与操作原则 |
   | --- | --- | --- |
   | 实习岗位简报（选 ③） | `岗位样本数据/` | 原始数据表与背景资料，只读，不进仓库 |
   | | `口径与要求/` | 口径说明、简报要求，只读 |
   | | `简报成品/` | HTML 简报，Git 跟踪 |
   | | `协作记录/` | 任务说明、检查记录、决策日志，Git 跟踪 |
   | 货币银行学第 3 章课件（选 ②） | `课程原始资料/` | 老师课件、教材章节、笔记，只读，不进仓库，不外传 |
   | | `讲解课件/` | HTML 成品 |
   | | `协作记录/` | 同上 |
   | 月度策略研报（第二个练习） | `宏观与行业数据/` | 原始数据，只读，不进仓库 |
   | | `研报草稿/` | 研报 Markdown，Git 跟踪 |
   | | `交付稿/` | 导出的 PDF 等，不进仓库 |

   选 ① 的照这个思路起：原始资料一个文件夹（名字说清是什么数据或资料），口径与要求一个，成品一个，协作记录一个。名字定下来后，后面 `CLAUDE.md` 的“文件约定”一节要为每个文件夹写一行范围和操作原则，和文件夹名互相印证。本手册下文按选 ③ 的四个名字写，选 ①② 的换成你自己的名字。

3. 让 Claude Code 建文件夹（第一句话，名字换成你定的），它会请你批准，看清路径再选允许。

4. **自己**用访达（Mac）或文件资源管理器（Windows）复制文件：

   | 放到 `实习岗位简报/` 下的 | 放什么 |
   | --- | --- |
   | `岗位样本数据/` | 选 ③：材料包 `01_数据简报/岗位样本数据/` 里的 3 个文件（数据表和两份背景）。选 ①②：你自己的资料、数据、课件、教材章节、笔记，放进你起名的原始资料文件夹 |
   | `口径与要求/` | 材料包 `01_数据简报/口径与要求/` 里的 `简报要求.md`；选 ③ 再加 `口径说明.md` |
   | 项目根目录 | `01_数据简报/模板/gitignore_白名单.txt` |

   `简报成品/` 和 `协作记录/` 先空着。

5. 让 Claude Code 把 `gitignore_白名单.txt` 改名为 `.gitignore`（第二句话）。打开看一眼，去掉开头那行复制说明后，内容应是这七行，**最后一行写你自己的原始资料文件夹名**：

   ```txt
   # 只记录原稿：Markdown 与 HTML
   *
   !*/
   !*.md
   !*.html
   !.gitignore
   # 原始资料不进仓库：最后一行写你的原始资料文件夹名
   岗位样本数据/
   ```

   选 ② 的最后一行写 `课程原始资料/`；选 ① 的写你起的名字，例如 `校园消费数据/`。逐行读：`*` 先把一切挡在外面；`!*/` 放行所有文件夹（不然进不到子目录）；`!*.md`、`!*.html`、`!.gitignore` 放行三类原稿；最后一行把原始资料再挡回去。于是数据表、老师的课件、以后导出的 PDF 和 PNG 都不进仓库，仓库里只有你和 AI 写的原稿。原始资料里有 `.md` 文件（例如你的课堂笔记）也会被最后一行挡住，因为它挡的是整个文件夹。

6. 让它开启版本记录，先不提交，报告会记录哪些文件（第三句话）。核对它的清单：应有 `.gitignore` 和 `口径与要求/` 下的 `.md`，**没有** 原始资料文件夹里的任何文件。清单里出现了原始资料的文件，见《常见问题》第 7 条。

7. 在 VS Code 源代码管理面板看一眼：面板里列出的“更改”应和它的清单一致，每个文件后面标 `U`（新文件，未跟踪）。原始资料文件夹里的文件不出现，这才对。

8. 让它做首次提交（第四句话）。它会请你批准两次：一次 `git add`（把文件放进暂存区），一次 `git commit`（写进历史）。看清命令再选第一个 **Yes**（只允许这一次）。带 `don't ask again` 字样的选项不要选。

### 可以对 Claude Code 说的话

第一句（文件夹名换成你定的）：

```txt
在当前文件夹里创建四个空文件夹：岗位样本数据、口径与要求、简报成品、协作记录。只创建文件夹，不要创建或修改其他文件。
```

第二句：

```txt
把项目根目录里的 gitignore_白名单.txt 改名为 .gitignore，内容一个字都不要改。改完把它的内容念给我看。
```

第三句：

```txt
给这个项目开启版本记录（git init），先不要提交任何东西。然后告诉我两件事：哪些文件会被记录，哪些文件被 .gitignore 挡在外面了。
```

第四句：

```txt
把现在会被记录的文件全部提交，提交说明写“初始化：项目结构与参考材料”。执行前先把你要运行的命令告诉我。
```

### ✅ 自查：第一步

- 项目文件夹里有原始资料文件夹（选 ③ 是 `岗位样本数据/`，3 个文件）、`口径与要求/`（选 ③ 是 2 个文件，选 ①② 至少有 `简报要求.md`）、`简报成品/`（空）、`协作记录/`（空）和 `.gitignore`。Windows 看不到 `.gitignore` 的，在文件资源管理器“查看”菜单里勾选“隐藏的项目”。
- `.gitignore` 最后一行是你的原始资料文件夹名，末尾带斜杠。
- `git status` 显示工作区干净（`nothing to commit, working tree clean`），源代码管理面板显示“没有更改”。
- `git log --oneline` 有 1 行：一串短哈希，后面是“初始化：项目结构与参考材料”。
- 让它列出被记录的文件（它会跑 `git ls-files`），列表里有 `.gitignore` 和 `口径与要求/` 下的 `.md`，没有原始资料文件夹的东西。
- 第一次提交报错 `Author identity unknown`，见《常见问题》第 1 条。

---

## 第二步：写任务说明和项目规则

### 学生做什么

1. 从 `01_数据简报/模板/` 复制三个文件到 `协作记录/`：`任务说明_模板.md` 改名为 `任务说明.md`，`检查记录.md`、`决策日志.md` 名字不变。再把 `CLAUDE_模板.md` 复制到项目根目录，改名为 `CLAUDE.md`（和 `协作记录/` 放在一起，不放上级文件夹）。

2. 打开 `协作记录/任务说明.md`，按六要素读一遍并改成你的版本。模板里有两个示例：实习岗位简报（选 ③ 直接改）和课程章节讲解课件（选 ② 用；选 ① 参考两者改写）。

   | 要素 | 这个任务里写什么 |
   | --- | --- |
   | 角色 | 选 ③：数据简报助手，数字按 `口径与要求/口径说明.md` 算，不自己定口径。选 ②：这门课的授课老师，讲解范围限于这一章。选 ①：按你的主题定 |
   | 背景 | 给谁看、依据哪些材料（写清原始资料文件夹里有什么）；选 ② 写这一章在课程里的位置 |
   | 任务 | 做一份 6–8 页的 HTML 简报或课件，至少 3 张图（数据图、结构图或流程图） |
   | 约束 | 原始资料文件夹不改动；材料里没有的信息不补造（数据、定义、公式都不补）；口径或材料没写清的先问；成果写在一个文件里 |
   | 格式 | 抄 `口径与要求/简报要求.md`：单个 HTML 文件 `简报成品/简报.html`，6–8 页；不联网也能打开，图用内嵌 SVG，不引用外部图表库；每张图有标题、单位或说明、来源一行；深色正文、浅色底、字号够大 |
   | 自检 | 抄 `口径与要求/简报要求.md`：图和正文里的数字、定义、公式能在原始资料或口径与要求里找到出处并标出来源文件；列出每个数字的计算过程（数据类）；没有外部链接 |

   最后一句要求它先交计划、等你确认。

3. 打开 `CLAUDE.md`，逐条读，每一条你都能说出为什么要写；不需要的删掉。先写最少的几条。“文件约定”一节按你起的文件夹名改：每个文件夹一行，写范围和操作原则（只读、可改、进不进仓库）。

4. 保存后 `/exit` 退出，重新运行 `claude`，让它复述任务说明（第一句话），对照你写的检查。

5. 在源代码管理面板看：`CLAUDE.md` 和 `协作记录/` 下三个文件标 `U`。点开 `协作记录/任务说明.md`，右侧“打开更改”视图里整篇是绿色，因为它是新文件。

6. 让它提交（第二句话）。纯手写的提交，说明写一行主题就够。

### 可以对 Claude Code 说的话

第一句：

```txt
读一遍 协作记录/任务说明.md 和 CLAUDE.md，用四行告诉我：要产出什么文件、有哪些约束、自检要查什么、项目规则有哪几条。只读，不要改任何文件。
```

第二句：

```txt
把这轮改动提交，提交说明写“任务说明与项目规则”。执行前先告诉我会提交哪些文件。
```

### ✅ 自查：第二步

- `协作记录/任务说明.md` 六要素齐全；“格式”和“自检”两项与 `口径与要求/简报要求.md` 一致；输出路径是 `简报成品/简报.html`。
- `CLAUDE.md` 在项目根目录，文件名不是 `CLAUDE.md.txt`；“文件约定”里每个文件夹一行，名字和你建的一致。
- 它复述的内容和你写的对得上。
- `git status` 干净；`git log --oneline` 有 2 行，最新一行在最上面。

---

## 第三步：跑出初版，看清改动再提交

### 学生做什么

1. 复制 `协作记录/任务说明.md` 代码块里的全部文字，粘贴给 Claude Code。它应先回复计划，不是直接写文件。逐条看：
   - [ ] 它读到的材料和你放进去的一致吗？数据类看行数、列名；课程章节类看它列出的章节标题、小节和页数。
   - [ ] 三张图打算画什么？每张图依据哪份材料的哪部分（数据表的哪几列，或教材的哪一节）？
   - [ ] 它打算把成果写到 `简报成品/简报.html` 吗？有没有打算改原始资料文件夹？
   - [ ] 它有没有说图怎么画（内嵌 SVG 还是引用网上的图表库）？没说就问。
   - [ ] 它问了问题吗？问了就先答，答案是你的判断，记进决策日志。

   计划有问题就指出来让它改；没问题再放行（第一句话）。

2. 执行中它会请求批准。写文件看清路径是 `简报成品/简报.html`；路径在原始资料文件夹里的一律拒绝。它想运行命令算数（例如一段 Python），看得懂、只是读取和计算的可以允许，看不懂就拒绝让它先解释，拒绝后它会改为逐条手算。

3. 完成后**自己**在浏览器打开 `简报成品/简报.html`（在文件上右键“打开方式 → 浏览器”，或把文件拖进浏览器窗口）。翻一遍：几页、几张图、每张图有没有标题、说明和来源一行；数字、定义、公式旁边有没有标来源文件。

4. 试一次断网：关掉 Wi-Fi 再刷新页面，图还在吗？图消失了，说明它引用了网上的图表库，见《常见问题》第 18 条，让它改成内嵌后再继续。不方便断网的，让它检查文件里有没有 `http` 开头的外部引用（第二句话）。

5. 让它报告这一轮改了什么、先不提交（第三句话）。在源代码管理面板点开 `简报成品/简报.html`：新文件整篇是绿色。命令行的 `git diff` 不显示还没被记录过的新文件，这是正常的；到第四步修订时，`git diff` 才会红绿两色。

6. 提交（第四句话）。这是 AI 参与的提交，建议的写法是一行主题加两段正文：“AI 做了什么”和“我改了什么／为什么接受或拒绝”。你这一轮没有改它的东西也可以写：写你检查了什么、为什么接受。这样三个月后回看历史，能分清哪些是 AI 的、哪些是你的判断。

### 可以对 Claude Code 说的话

第一句（计划看过之后）：

```txt
计划可以，开始执行。
```

第二句（检查外部引用）：

```txt
检查 简报成品/简报.html 里有没有引用网上的文件：http 或 https 开头的 script、link、img。有的话逐条列出来，先不要改。
```

第三句（提交前先报告）：

```txt
先不要提交。用 git status 和 git diff 的结果告诉我：这一轮新建或修改了哪些文件，每个文件改了什么。
```

第四句（建议的两段式提交说明，横线处换成你的话）：

```txt
把这轮改动提交。提交说明按下面写，第一行是主题，空一行后是两段正文：

简报初版：____ 页、____ 张图

AI 做了什么：____

我改了什么／为什么接受或拒绝：____
```

### ✅ 自查：第三步

- `简报成品/简报.html` 存在，浏览器能打开，断网后图仍显示；6–8 页，至少 3 张图，每张图有标题、说明、来源。
- 你没有批准过任何改动原始资料文件夹的操作。
- `git status` 干净；`git log --oneline` 有 3 行。
- 让它显示最近一次提交的完整说明（它会跑 `git log -1`），能看到主题一行；按建议写了两段的，两段正文也在。

---

## 第四步：对照原始材料核一处内容，写修改意见，出修订版

### 学生做什么

1. 挑一处内容，回到原始材料核一遍。数据类（选 ③ 和选 ① 的数据主题）挑一张图，把它的数字和数据表核一遍，建议挑涉及月薪的那张：用 Excel 或 VS Code 打开 `岗位样本数据/实习岗位样本_2026春.csv`，用筛选功能按图上的分类筛出行数，和图上的数字比。课程章节类（选 ②）挑一处定义、公式或例题，翻到教材或老师课件的原文比对：措辞、符号、条件、数值是否一致，有没有它自己补的内容。

2. 核之前先读 `口径与要求/` 里的文件。选 ③ 读 `口径说明.md`，两处要看仔细：月薪区间里的“面议”怎么计；编号不同、其余字段相同的岗位怎么计。图上的数字和你按口径数出来的不一样，就是发现。选 ①② 读 `简报要求.md` 里关于出处的那条：每个数字、定义、公式都要能指到来源文件，指不到的就是发现。

3. 让它列出这处内容的依据（第一句话），和你自己核的比。它说的“已核对”不算数，你核的才算。

4. 打开 `协作记录/检查记录.md`，把发现写进去。每条修改意见写清五件事：**位置 → 问题 → 原始依据 → 修改要求 → 复查方式**。没发现错误的，不要编一个；提一项明确的新要求走一轮修订，例如“每张图下方加一行说明，写明依据的材料文件和纳入、排除的范围”。

5. 发修改意见（第二句话）。这次直接改 `简报成品/简报.html`，不另存新文件。

6. 改完先看 diff，再提交：源代码管理面板里 `简报成品/简报.html` 标 `M`，点开是红绿两色，红是删掉的行，绿是加上的行，只看这两种颜色。`协作记录/检查记录.md` 也标 `M`。确认改动在你要求的位置，再让它提交（第三句话）。

### 可以对 Claude Code 说的话

第一句（数据类）：

```txt
把 ____ 这张图每个数字的计算过程列出来：按什么筛选、数了多少行、月薪区间为“面议”的岗位怎么处理的、重复发布的岗位怎么处理的。只回答，不要改文件。
```

第一句（课程章节类）：

```txt
第 ____ 页的 ____（定义／公式／例题）依据的是哪份文件的哪一节？把原文和课件里的写法并排列出来，指出有没有你自己补的内容。只回答，不要改文件。
```

第二句（横线处换成你的检查记录）：

```txt
请修改 简报成品/简报.html，直接改这个文件，不要另存：
1. 位置：____ 这张图（或第 ____ 页的 ____）。问题：____。原始依据：____ 文件的 ____（列名、条款号或章节）。修改要求：____。复查方式：____。
改完先不要提交，告诉我改了哪些行。
```

第三句：

```txt
把这轮改动提交。提交说明第一行写主题，空一行后分两段：“AI 做了什么”写你改了哪里、从什么改成什么；“我改了什么／为什么接受或拒绝”这一段留给我，内容是：____
```

### ✅ 自查：第四步

- `协作记录/检查记录.md` 里至少一条修改意见，五件事齐全。
- 浏览器刷新后，那处内容和你按原始材料核出来的一致；图下能看到依据的材料文件和纳入、排除的范围。
- `git diff` 或面板里，改动集中在你指出的位置，没有顺手改别的地方。
- `git status` 干净；`git log --oneline` 有 4 行；最新一条说明是一行主题，按建议写的话还有两段正文。

---

## 第五步：试一次改坏，再退回来

这一步故意做一次不满意的改动，练两种回退：撤销一次已提交的改动（`git revert`），丢弃一处没提交的改动（`git restore`）。

### 学生做什么

1. 让它做一处大改动：换一套配色，或把三张图合成一张（第一句话）。改完在浏览器刷新看效果，然后提交（第二句话）。这一条提交的主题写“试改：____”。

2. 比较新旧两版。旧版在时间线里：在 VS Code 打开 `简报成品/简报.html`，展开资源管理器底部的“时间线”，点上一条提交，能看到这次改动的对照。决定要不要退回。手册假定你决定退回；觉得新版更好也可以留着，在决策日志写明理由，然后另找一处小改动来练回退。

3. 回退前先让它报告（第三句话）：它会怎么做、执行什么命令、动哪些文件。合格的回答是 `git revert` 加上一条提交的哈希，并说明会新增一条提交、历史保留。它提出 `git reset --hard` 的，拒绝，告诉它“不要 reset，用 revert”。

4. 确认后放行（第四句话）。它会请你批准 `git revert`；有的版本会再问一次提交说明。

5. 刷新浏览器：简报回到试改之前的样子。`git log --oneline` 多了一行“Revert ...”或你指定的主题，试改那一条仍然在，这就是“历史保留”。

6. 再练 `restore`：**自己**在 VS Code 里打开 `协作记录/任务说明.md`，在末尾随便加一行字，保存。源代码管理面板里它标 `M`，点开能看到那一行是绿色。现在丢弃这处改动，同样让 Claude Code 做：先让它报告（第五句话），合格的回答是 `git restore 协作记录/任务说明.md`，并提醒你这一步不可恢复。确认后放行。面板上的“放弃更改”本课不用。

   `git restore` 丢掉的改动找不回来，所以先报告、再执行。

### 可以对 Claude Code 说的话

第一句（二选一）：

```txt
把 简报成品/简报.html 换一套配色，页面底色和图表颜色都换，直接改这个文件。改完先不要提交，告诉我改了什么。
```

```txt
把 简报成品/简报.html 里的三张图合并成一张放在同一页，直接改这个文件。改完先不要提交，告诉我改了什么。
```

第二句：

```txt
把这轮改动提交，主题写“试改：换配色”，正文一段写你改了什么。
```

第三句（回退前先报告）：

```txt
我想撤销上一次提交“试改：换配色”，回到它之前的样子，但历史记录要保留。先告诉我你会怎么做、会执行什么命令、会动哪些文件，先不要执行。
```

第四句：

```txt
可以，按你说的执行。提交说明写“撤销：换配色的改动”，正文写一句为什么退回：____
```

第五句（丢弃未提交的改动）：

```txt
协作记录/任务说明.md 里有一处没提交的改动，我不要了，想让它回到上次提交的样子。先告诉我你会执行什么命令、这个操作能不能恢复，先不要执行。
```

### ✅ 自查：第五步

- `git log --oneline` 有 6 行：从上到下是撤销、试改、修订、初版、任务说明、初始化。试改那一条没有消失。
- 浏览器里的简报和第四步结束时一样。
- `协作记录/任务说明.md` 末尾那行字没有了；`git status` 干净。
- 你能说出两次回退的区别：`revert` 针对已提交的改动，新增一条提交，历史保留；`restore` 针对没提交的改动，改动直接消失，不可恢复。
- 它两次都先报告、经你确认才执行；`git reset --hard` 没有出现过。

---

## 第六步：写决策日志和项目入口，最终提交

### 学生做什么

1. 打开 `协作记录/决策日志.md`，至少写三条：接受初版时你检查了什么；修订时你按什么依据改了哪处内容；试改为什么退回。每条都有“依据”。

2. 把 `01_数据简报/模板/README_模板.md` 复制到项目根目录，改名为 `README.md`。里面三节要填：
   - **这个项目做过什么**：让它把 `git log --oneline` 念成一段话（第一句话），你改成自己的话写进去。一条提交线念下来就是项目日志。
   - **版本记录在哪里**：在项目文件夹里的隐藏目录 `.git/`，和文件在同一块硬盘上，所以它不是备份；复制项目文件夹时要连 `.git/` 一起。
   - **怎样恢复**：看历史用 `git log --oneline`；取回某个文件的旧版本用 `git restore --source=<哈希> -- <文件>`；撤销一次提交用 `git revert <哈希>`。这三句抄进去，换电脑的你也能看懂。

3. 最终提交（第二句话）。

4. 让它列出被记录的全部文件（第三句话），核对没有原始资料文件夹，没有 PDF、PNG。

**同伴互查：** 请旁边的同学只看你项目里的 `README.md`，说出这个项目改过几版、哪一版被退回、怎样取回退回前的版本。一分钟内说出来，交接就写清楚了。

### 可以对 Claude Code 说的话

第一句：

```txt
读一下 git log --oneline，把每一条提交连成一段话，告诉我这个项目从头到尾做过什么。只回答，不要改文件。
```

第二句：

```txt
把这轮改动提交，提交说明写“交接：决策日志与项目入口”。执行前先告诉我会提交哪些文件。
```

第三句：

```txt
列出版本记录里跟踪的全部文件，再显示 git log --oneline。只读。
```

### ✅ 自查：第六步

- `README.md` 三节都有内容；`协作记录/决策日志.md` 至少三条，每条有依据。
- `git status` 干净；`git log --oneline` 有 7 行。
- 被记录的文件只有 `.md`、`.html` 和 `.gitignore`；原始资料文件夹不在其中。
- 同学只看 `README.md` 就能说出退回的是哪一版、怎样取回。

---

## 第二个练习：投资研报的 Git 管理

这个练习反过来：不是从空文件夹开始，而是拿到一个已经有初稿的月度策略研报项目（宏观与行业数据为真实公开数据，配置判断为练习设定），自己给它开启版本记录，把初稿存档。然后按项目里 `CLAUDE.md` 的规则做两件事，分开提交：更新宏观数据；下调新能源板块评级。用 `git log --oneline` 看历史，读一次 diff。接着收到一份“补贴政策延续”的通告，评级下调的依据不成立了，用 `git revert` 只撤销那一条提交，宏观数据的更新不受影响，历史里两条都在。

与数据简报练习的对照：那边的 `.gitignore` 是白名单（先挡一切，再放行 `.md`、`.html`），这边是黑名单（默认记录一切，逐条列出不记录的原始数据文件夹 `宏观与行业数据/`、交付稿文件夹 `交付稿/` 等）。两种写法都让原始数据留在仓库外，只记录你和 AI 一起改出来的原稿；哪种合适，看你更容易数清“该记录的”还是“不该记录的”。项目文件夹的名字也照第一步的原则起：`宏观与行业数据/` 只读不进仓库，`研报草稿/` 由 Git 跟踪，`交付稿/` 不进仓库。

步骤、可以说的话和每步自查都在 `材料包/02_投资研报/练习说明.md`，照它做，另建一个项目文件夹，不和数据简报混在一起。做完 `git log --oneline` 应有 5 行，其中一条是撤销。

---

## 回看自己的版本记录与协作过程

做完六步，项目里有两条记录：Git 里的版本记录，和 Claude Code 里的对话。两条都能回看，下面两小节是怎么看、怎么导出的教程。

### 在 VS Code 里看 Git 历史图

源代码管理面板里有一个“源代码管理图”（Source Control Graph，VS Code 内置，译名以屏幕为准）：打开面板后，它在“更改”列表下方，折叠着的话点标题展开；也可以在面板右上角的“…”菜单里找“查看 → 源代码管理图”一类的入口。

能看到什么：每条提交一行，从上到下由新到旧，一行里有提交说明的主题、作者和时间，左侧一条竖线把提交串起来（本周没有分支，所以是一条直线）。点一条提交，右侧会列出这次提交改了哪些文件；再点某个文件，打开的是那次改动的前后对照，红是删掉的、绿是加上的。第五步的撤销提交在这里能看到它改的文件和试改那条正好相反。

看单个文件的历史用“时间线”：在资源管理器里选中文件（例如 `简报成品/简报.html`），展开资源管理器底部的“时间线”，列出的是这个文件被哪几次提交改过；点一条，看那次的前后对照。“源代码管理图”按提交看全项目，“时间线”按文件看，两个都是看，不改东西。

### 导出与 Claude Code 的交互记录

Claude Code 会话里输入 `/export`，会打开一个菜单，两个选项：复制到剪贴板，或保存为纯文本文件；导出的是这次会话的全部消息和工具输出，以可读文本呈现。要跳过菜单直接写进指定文件，在命令后面带文件名：

```txt
/export 协作记录/对话记录_20260922.txt
```

建议就这样存进 `协作记录/`，文件名带日期；一次会话做了几件事的，在文件名里加上，例如 `对话记录_20260922_初版与修订.txt`。它是 `.txt`，白名单 `.gitignore` 不放行，所以不会进仓库；想让它进仓库就把后缀写成 `.md`。

之前的会话（例如第二步 `/exit` 之前那一段）用 `/resume` 找回：运行 `claude` 后输入 `/resume`，从列表里选那次会话，恢复后 `/export` 同样可用。同一个项目文件夹里做过几次会话，就找回几次、各导出一份。

一点注意：对话记录里会有你粘贴过的材料内容，选 ② 的同学导出文件里可能含老师课件的原文，这份文件和课程资料一样只放本机，不外传。

---

## 进阶

| 练习 | 材料 | 要求 |
| --- | --- | --- |
| 只恢复误删的一节 | `材料包/04_回退练习/练习说明.md`，解压 `回退练习.zip` 里的 `restore-lab/` | 工作区里两个文件都有未提交的改动：一个被误删了一节，一个是新草稿。用 `git restore --source=<哈希> -- <文件>` 只恢复那一节，不碰另一份草稿 |
| 说出四种状态 | 同上，`status-lab/` | 四个文件分别处于已修改未暂存、已暂存、新建未跟踪、被忽略。对照面板标记和 `git status` 说出各在哪个位置 |
| 换一个主题再做一遍 | `材料包/03_迁移主题/` | 社团活动与经费的数据表，12 个社团 × 12 个月。另建一个项目文件夹（示例名 `社团经费简报/`，原始资料文件夹 `社团经费数据/`），从第一步做起；口径说明里有一处缺报月份的处理规则，第四步在这里核 |

回退练习的两个仓库自带 `.git/`，解压后不要新建仓库，直接在里面启动 Claude Code 或打开面板看。这两个仓库是预先做好的，里面的文件夹名不按本手册的原则起，不用改。

## 会话回退与项目版本的区别

Claude Code 自带一种回退：输入 `/rewind`，或在输入框为空时按两次 `Esc`，会打开一个菜单，可以选“只恢复代码”“只恢复对话”或“两者一起”，回到这次会话里某一句话之前的状态。它每次你发消息前自动记一个检查点，保留最近 100 个。

它和 Git 的分工：

| | `/rewind` | Git |
| --- | --- | --- |
| 管什么 | 这次会话里 Claude 用编辑工具改过的文件 | 项目里所有被记录的文件 |
| 不管什么 | 它用命令删掉、移动的文件；你自己在 VS Code 里改的；上一次会话改的 | `.gitignore` 挡在外面的文件；没提交过的改动 |
| 保留多久 | 会话结束后约 30 天 | 一直在，直到你删掉 `.git/` |
| 用在哪 | 刚让它改了一轮，马上后悔 | 第五步那样的正式回退，以及交接 |

官方文档的原话是“不替代版本控制”。这里练的每一次提交，都是为了在会话之外留下能回去的地方。

---

## 做完后检查：项目里应有的文件

数据简报练习（以选 ③ 为例，选 ①② 的文件夹名换成你自己起的）：

```txt
实习岗位简报/                  项目文件夹，在这里启动 claude
├── .git/                      版本记录（隐藏目录），复制项目时要带上
├── .gitignore                 白名单，七行，最后一行是原始资料文件夹名
├── README.md                  项目入口：做过什么、版本记录在哪、怎样恢复
├── CLAUDE.md                  项目规则，文件约定里每个文件夹一行
├── 岗位样本数据/              数据表与两份背景，未改动，不进仓库
├── 口径与要求/                口径说明、简报要求
├── 简报成品/                  简报.html（同一个文件，历史由 Git 保管）
└── 协作记录/                  任务说明.md、检查记录.md、决策日志.md
```

- `git log --oneline` 至少 7 行，能念成一段话；其中一条是撤销。
- 被记录的文件只有 `.md`、`.html`、`.gitignore`，没有原始资料文件夹，没有 PDF、PNG。
- `git status` 干净。
- 简报里的数字、定义、公式旁边标了来源文件；选 ② 的没有整段复制老师课件的原文。

第二个练习（投资研报）在另一个项目文件夹里：`git log --oneline` 5 行（做了收尾是 6 行），其中一条是撤销；`git ls-files` 里没有 `宏观与行业数据/` 和 `交付稿/`；`研报草稿/` 里的宏观数据是 3 月版、新能源一行是“维持超配”且理由提到补贴延续。


## 要记住的四件事

1. **未提交的找不回，同一块硬盘不是备份。** 每完成一个能说清的目标就提交一次；`.git/` 和文件在一起，备份要另外做。
2. **提交前先让它报告，再放行。** `git status`、`git log`、`git diff` 它直接跑；`git commit`、`git revert`、`git restore` 先说清会做什么、动哪些文件，你确认后再执行。
3. **只记录原稿，文件夹名要能说明自己。** 白名单 `.gitignore` 放行 Markdown 和 HTML，原始资料文件夹与导出物不进仓库；`git status` 里看不到被挡的文件才算对。文件夹按内容起名，看名字就知道只读还是可改、进不进仓库。
4. **回退分三层，`reset --hard` 不用。** `restore` 丢弃没提交的改动（不可恢复）；`restore --source` 取回某文件的旧版本；`revert` 用新提交抵消旧提交，历史保留。`/rewind` 管会话，Git 管项目。
