切换上机材料(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/里的内容。