跳到主内容

course materials · 2026 秋季本科

进阶练习:回退与换主题

Week 3 · 2026-09-22 · 上机材料

返回本周材料

两个带历史的小仓库:只恢复误删的一节、说出四种文件状态;再换一个主题从第一步做一遍。

切换上机材料(4 篇)
本页目录

上机导航 · 常见问题

做完练习一、练习二之后再做。

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

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

回退练习:两个带历史的小仓库

教学模拟材料。仓库里的数据、结论与“课程助教”署名均为虚构。

回退练习.zip 里有两个已经带 Git 历史的小项目:

文件夹练什么用到的动作
restore-lab/从旧提交取回一个文件里被误删的一节,不碰另一个文件的未提交草稿git restore --source=<哈希> -- <文件>
status-lab/说出四个文件各自处于哪个位置(已修改未暂存、已暂存、未跟踪、被忽略)git status、VS Code 源代码管理面板

两个仓库都由助教预先布置好“事故现场”:历史已经提交,工作区里有未提交的改动。它们的价值在 .git/ 这个隐藏文件夹里,不要在里面运行 git init,也不要一上来就提交或放弃更改。

一、解压与核对

把 zip 解压到你自己的文件夹(桌面、文档都可以),得到 restore-lab/ 与 status-lab/ 两个文件夹。用 VS Code 打开其中一个文件夹,或在终端进入它,先核对一遍,再开始练习。

restore-lab

git status --short
git log --oneline

应看到:

 M 论文稿/introduction.md
 M 论文稿/results.md

b37a5d5 补充数据来源说明
dda9454 补充稳健性分析
6ac65d0 初稿

再看一眼“补充稳健性分析”那次提交里 results.md 的样子:

git show dda9454:论文稿/results.md

输出里应有一节 ## 稳健性分析,而当前工作区的 论文稿/results.md 没有这一节。

status-lab

git status --short
git log --oneline

应看到:

 M 协作记录/任务说明.md
M  简报成品/简报.html
?? 协作记录/检查记录.md

0ea41b3 初始化

简报成品/简报.pdf 在文件夹里能看到,但 git status 不列它;加上 --ignored 才会以 !! 显示。

核对不通过怎么办

  • 提示 fatal: not a git repository:说明 .git/ 没有跟着解压或复制过来。常见原因是复制时跳过了隐藏文件夹,或者用网盘同步过一次。重新从 zip 解压一份,不要在当前文件夹新建空仓库。
  • 哈希或状态与上面不一致:说明这份仓库已经被动过(提交、放弃更改、恢复过)。重新解压一份干净的再开始。
  • 中文文件名显示成 \345\244... 这样的转义:在终端运行 git config --global core.quotepath false。

二、restore-lab:只取回误删的那一节

现场

第二次提交“补充稳健性分析”在 论文稿/results.md 加了一节“稳健性分析”;第三次提交“补充数据来源说明”只改了 论文稿/data.md。之后有人在工作区把 results.md 的“稳健性分析”一节删掉了,没有提交;同时 论文稿/introduction.md 末尾多了一段标着“(草稿)”的新内容,也没有提交。

目标

把 论文稿/results.md 恢复成“补充稳健性分析”那次提交时的样子,论文稿/introduction.md 的草稿一个字都不能丢。

要做到这一点,先得从 git log --oneline 里找到那次提交的哈希,再用 git restore --source=<哈希> -- 论文稿/results.md 指定从哪次提交取、取哪个文件。不带路径的 git restore . 会把 introduction.md 的草稿一起丢掉,且找不回来。

怎么做

在 restore-lab/ 里启动 claude,先让它报告、不执行:

论文稿/results.md 里的“稳健性分析”一节被误删了,还没提交;论文稿/introduction.md 有一段未提交的草稿要保留。请先用 git status 和 git log --oneline 看一下现状,找出“补充稳健性分析”那次提交的哈希,告诉我你打算怎么把 results.md 恢复到那个版本,写出你会运行的命令。先不要执行。

它应该报告哈希是 dda9454,给出 git restore --source=dda9454 -- 论文稿/results.md 这样的方案,并说明这条命令不会碰 introduction.md。自己对照 git log --oneline 确认哈希对应的是“补充稳健性分析”而不是最新那次“补充数据来源说明”,文件路径也对,再放行:

可以,按你说的执行,然后运行 git status --short 和 git diff --stat 给我看结果。

做对了应该看到

git status --short
 M 论文稿/introduction.md

results.md 不再出现在列表里,说明它与最近一次提交一致(第三次提交没有改这个文件,所以取回“补充稳健性分析”的版本后与 HEAD 相同);introduction.md 仍是 M,草稿还在。打开 论文稿/results.md,“稳健性分析”一节回来了;打开 论文稿/introduction.md,末尾那段“(草稿)”还在。

在 VS Code 源代码管理面板里:“更改”一组只剩 introduction.md 一项。点开它能看到右侧多出的草稿段落。

常见错法

  • 让 Claude Code 直接“恢复所有文件”或运行不带路径的 git restore .:introduction.md 的草稿会一起被丢掉,且找不回来。
  • 用 git reset --hard:同样丢草稿,本课程不用这条命令。
  • 恢复后顺手提交:这道题不要求提交;若要提交,先确认提交说明写清楚“取回被误删的稳健性分析一节”。

三、status-lab:四个文件各在哪个位置

现场

仓库只有一次提交“初始化”。之后助教布置了四种状态,每个文件一种:

文件状态
协作记录/任务说明.md已修改,未暂存
简报成品/简报.html已修改,已暂存
协作记录/检查记录.md新建,未跟踪
简报成品/简报.pdf被 .gitignore 忽略(规则是 *.pdf)

目标

不看上面这张表,自己从 git status 的输出和 VS Code 源代码管理面板判断每个文件处于哪个位置,并说出理由。

怎么做

先自己看 git status --short 的两列标记:左列是暂存区,右列是工作区。

 M 协作记录/任务说明.md   左列空、右列 M:工作区改了,暂存区没有 → 已修改未暂存
M  简报成品/简报.html     左列 M、右列空:改动已放进暂存区 → 已暂存
?? 协作记录/检查记录.md   两列问号:Git 还没跟踪这个文件 → 未跟踪

简报成品/简报.pdf 不出现,因为 .gitignore 里的 *.pdf 把它挡在外面。运行 git status --short --ignored 会多出一行 !! 简报成品/简报.pdf。

再对照 VS Code 源代码管理面板(左侧栏的分叉图标):

面板里的位置标记对应文件
“暂存的更改”一组M简报成品/简报.html
“更改”一组M协作记录/任务说明.md
“更改”一组U协作记录/检查记录.md
面板里不出现;资源管理器里文件名显示为灰色—简报成品/简报.pdf

判断完,再让 Claude Code 复述一遍作对照:

请运行 git status,然后逐个文件告诉我它处于工作区、暂存区还是未跟踪,哪个文件被 .gitignore 忽略了、是哪条规则挡住的。只报告,不要改任何东西。

它的答案应与你自己的判断一致。若不一致,先看 git status 的原始输出,再决定信谁。

可以追加的两个小动作

  • 打开 协作记录/任务说明.md 和 简报成品/简报.html,用 git diff 看未暂存的改动;已暂存的改动要用 git diff --staged 才能看到。体会一下两条命令的区别。
  • 在面板里点 协作记录/任务说明.md 旁的 “+”(暂存更改),再看 git status --short:它从 M 变成 M 。再点 “−”(取消暂存)变回去。这两步不会改文件内容。

四、练完之后

  • 两个文件夹用完可以删掉;再练一次就重新解压。
  • 别把它们放进网盘同步的文件夹里长期保存,同步工具可能丢掉 .git/ 里的内容。