生活分享
Git、分支、diff 与还原
Git 保存档案版本,分支承接一组修改,diff 显示差异。Codex 可以协助操作,但你仍要确认修改属于这次任务。聊天纪录与 Git 历史不同,恢复旧对话不会自动还原档案。
阅读时间约 15 分钟 · 操作 30 分钟

返回 Codex 教学总目录Codex 学习中心:完整教程目录从安装、第一个任务到 MD 规则与进阶集成,规划 60 篇 Codex 教程、十个单元。按程度、平台、需求或命令搜索下一篇;尚未公开的教程会标示状态,方便安排学习路线。阅读全文
目标与准备
先熟悉终端机路径终端机与路径:找到专案根目录在 Windows、macOS、Linux 建立练习资料夹,确认目前目录并辨识相对与绝对路径。阅读全文。工作目录是目前磁碟内容,暂存区是下一次 commit 要包含的内容,commit 是已记录的版本;三者可能不同。分支指向一条版本线,不会自动复制所有未提交档案。要同时在多份目录工作,另看worktreeWorktree 与多任务隔离Worktree 让同一个 Git 程式库有不同的工作目录,各自承接不同分支。它适合让两项工作分开改档,但资料库、连接埠与外部服务仍可能共用,不能把档案隔离当成所有资源隔离。阅读全文,不要把建立分支当作完成备份。
步骤 1:建立独立基准
在不属于其他专案的新资料夹 codex-git-lab 放入 expected 的五个档案。用编辑器开该资料夹与终端机,PowerShell 用 Get-Location、macOS/Linux 用 pwd 核对位置,再跑 git --version。若系统找不到 git,先依平台的 Git 官方安装说明完成,重开终端机;不要在原本工作库执行接下来的初始化。
git init -b main
git config user.name "Practice Learner"
git config user.email "learner@example.invalid"
git add index.html style.css app.js core.mjs core.test.mjs
git diff --cached --name-only
git commit -m "Add practice baseline"
git status --short
逐行执行,不略过中间检查。初次暂存应恰好是五档,提交后 status 应无变更。姓名与保留网域信箱只写在这个练习库的本机设定,不是 GitHub 登入,也没有 --global。若 commit 遇到你既有的签章或 hooks 要求,先依自己的设定完成或暂停记录原因,不改全域政策来追求成功画面。
步骤 2:在分支上做两个可辨认修改
git switch -c codex/title-lab
git branch --show-current
确认分支是 codex/title-lab。用编辑器在 index.html 只把 h1 的 Make room for one small task. 改成 Plan one useful step.。另外在 style.css 最尾端加下面的注解,模拟另一份尚未提交的工作。这次要交付的是标题,CSS 注解必须保留在工作目录但不能混入标题提交;两个改动都是教材,无正式资料。
/* KEEP-MY-NOTE */
git status --short
git diff -- index.html style.css
diff 的减号是旧行,加号是新行,周围未改内容提供定位。检查 index.html 是否只改 h1,style.css 是否只多注解,不能只看「2 files changed」。如果请 Codex 说明,使用下列唯读要求,让它辨认现有工作及本次范围;不要一开始就叫它提交所有差异。
Inspect this lab's current branch, status and diff without editing, staging or committing. The intended change is only the h1 title in index.html. The KEEP-MY-NOTE comment in style.css represents separate work and must be preserved. Explain what belongs in the title commit and what must stay outside it.
步骤 3:只暂存一档,再练习还原
git add index.html
git diff --cached --name-only
git diff --cached -- index.html
git diff -- style.css
现在再做一次同档案的差异比较:不要重新 git add,用编辑器只把已暂存的 Plan one useful step. 改成 Compare one useful step.。执行下面四行,观察工作目录、暂存区与 HEAD 的不同版本。
git status --short
git diff --cached -- index.html
git diff -- index.html
git show :index.html
status 应有 MM index.html 和未暂存的 style.css。这里不是冲突;依 Git status 官方说明,第一栏 M 代表暂存区相对 HEAD 有改动,第二栏 M 代表工作目录又相对暂存区有改动。cached diff 应是 Make → Plan,普通 diff 应是 Plan → Compare;show :index.html 读到的是暂存版 Plan。若此时一般提交,Compare 不会自动跟进。
接著按原顺序执行两种 restore。第一行只移出暂存,Compare 仍在编辑器与磁碟;第二行会把 index.html 回复到此时暂存区中的基准旧标题。若略过第一行就做 worktree restore,来源仍是暂存的 Plan,结果会不同。Git restore 官方说明列出这个预设来源差异。执行前确认要丢弃的是这个练习标题;CSS 必须保留。
git restore --staged -- index.html
git restore --worktree -- index.html
git status --short
git diff -- style.css
此时 status 应只剩 style.css,h1 回到 Make room for one small task.,注解仍在。这是本篇最重要的保留检查:撤销自己的修改,不等于把别人的工作一起清干净。如果只执行 restore --staged,它并不删除工作目录内容;相反地 restore --worktree 会覆写指定档案,不能只看到 restore 一词就把两者当同义。
步骤 4:提交指定修改,再保留历史撤回
重新用编辑器把 h1 改成 Plan one useful step.,再次只暂存 index.html 并检查 cached diff。下面提交只应包含标题,style.css 注解继续留在工作目录。用 show 的档名清单确认真正提交了什么,不把终端机显示成功当作范围一定正确。
git add index.html
git diff --cached --name-only
git diff --cached -- index.html
git commit -m "Update practice title"
git show --format=short --name-only HEAD
git status --short
撤回已提交修改前先处理工作目录。本教材只有自己加的 CSS 注解:确认内容已保留核对后,现在明确决定结束这个保留练习,用下列第一行只丢弃它。status 必须干净,再检查最新提交确实是 Update practice title,才对 HEAD 执行 revert。正式工作若仍有其他修改,不照搬这个清理步骤,先保存或另行处理。
git restore --worktree -- style.css
git status --short
git log -1 --oneline
git revert --no-edit HEAD
git log -3 --oneline
git status --short
revert 会新增撤回提交,保留原本标题修改的历史。预期 h1 回旧值,log 仍看得到基准、标题修改与撤回三笔,工作目录干净。若出现冲突,先读提示与实际状态,不连按强制选项;只想取消这次未完成的 revert,可依 Git 指引使用 git revert --abort,之后重新检查档案。
命令对照、常见问题与验收
| 目的 | 命令 | 核对点 |
|---|---|---|
| 看尚未暂存内容 | git diff | 工作目录与暂存差异 |
| 看将提交内容 | git diff --cached | 暂存与 HEAD 差异 |
| 移出暂存 | git restore --staged -- index.html | 编辑仍在 |
| 丢弃指定未提交修改 | git restore --worktree -- index.html | 先确认来源与路径 |
| 撤回已提交修改 | git revert --no-edit HEAD | 新增历史,先确认目标及干净状态 |
找不到分支先看是否在对的 repository;status 多出意外档案就先查看,不使用 git add . 把它们一起带进去。若同一档案混有自己的与原有修改,整档暂存会一起提交,应先读懂每段差异再分段处理。这次验收要能证明 CSS 在标题提交中被排除、两种 restore 效果不同、revert 保留历史。图中 1 是辨认状态,2 是限定提交,3 是验证还原;下一步看测试、Review 与 PR测试、Code Review 与 PR测试确认程式在指定条件的行为,Code Review 检查变更是否有遗漏或风险,PR 则让人查看并讨论要合并的差异。三者互补;通过测试不等于审查通过,开 PR 也不是已合并。阅读全文。
返回 Codex 教学总目录Codex 学习中心:完整教程目录从安装、第一个任务到 MD 规则与进阶集成,规划 60 篇 Codex 教程、十个单元。按程度、平台、需求或命令搜索下一篇;尚未公开的教程会标示状态,方便安排学习路线。阅读全文
阅读完整文字说明
Branch to Diff to Commit
同主题延伸阅读
生活分享
Codex 学习中心:完整教程目录
从安装、第一个任务到 MD 规则与进阶集成,规划 60 篇 Codex 教程、十个单元。按程度、平台、需求或命令搜索下一篇;尚未公开的教程会标示状态,方便安排学习路线。
生活分享
实战:制作小网站
从 brief.md 规划并制作 Small Steps 待办网站,完成新增、完成、删除、筛选与本机资料保存。将 HTML、CSS、资料函式、画面事件与测试分开,以 Node 测试和浏览器操作验收,并留下可重新启动与还原的交接纪录。
生活分享
用量与效率:减少重工
记录任务条件、模型选项、时间与成果,找出能减少无效重试和过多上下文的调整。
引用本文的文章
最新旅游情报攻略

攻略东京
东京住哪一区:新宿、上野、东京站、涩谷、浅草、池袋、银座七区比较,机场交通、住宿税、行李寄送一次看
东京住哪一区?用同一套标准比较新宿、上野、东京站、涩谷、浅草、池袋、银座七个区域:从成田、羽田机场怎么过来、有哪些线路、周边有什么、街区氛围、适合谁。附比较表与山手线示意图,以及 2026 年 9 月核实的东京都住宿税(2027 年 4 月改为 3%)和机场宅急便寄送行李的规则。
- 预算
- 酒店

攻略东京
东京交通票券怎么选:Suica/Welcome Suica、Tokyo Subway Ticket、JR Pass 值不值得买
第一次去东京,每人先用一张 IC 卡按次付费(Welcome Suica 免押金、有效期 28 天)。一天搭四趟以上地铁,再加买 2,000 日元的 Tokyo Subway Ticket 72 小时券;只玩东京、不去关西,买 JR Pass 一定不划算。用决策图比较 TOURIST PASMO、iPhone 里的 Suica、东京 Metro 一日券能搭什么、不能搭什么;价格于 2026 年 9 月核实。
- 交通
- 预算

攻略东京
东京迪士尼乐园、海洋攻略:票价、梦幻泉乡 Fantasy Springs、尊享卡 DPA 与预约等候卡怎么用,第一次去选哪个园区
东京迪士尼一日护照采用浮动票价,2026 年 9 月平日大多为 9,900 日元、周末为 10,900 日元,官网每天 14:00 开售两个月后同一天的门票;免费的优先通行卡已不在官网服务清单,缩短排队时间只剩付费的迪士尼尊享卡(每人每次 1,000 至 3,500 日元)。另有运营时间与 25 周年活动、预约等候卡与报名体验、梦幻泉乡如何进入,以及第一次去选乐园还是海洋;2026 年 9 月通过东京迪士尼度假区官网核实。
- 行程范例
- 亲子
资料来源
- Git installation · 查证日期:
- Git init · 查证日期:
- Git diff · 查证日期:
- Git restore · 查证日期:
- Git revert · 查证日期:
- Codex review workflow · 查证日期: