生活分享

Git、分支、diff 与还原

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

阅读时间约 15 分钟 · 操作 30 分钟

实作顺序示意图,非产品介面截图。
图片:Mokaair (© Mokaair)
回总目录:Codex 学习中心:完整教程目录

实践 · Desktop / CLI / VS Code / JetBrains

本篇目录
  1. 目标与准备
  2. 步骤 1:建立独立基准
  3. 步骤 2:在分支上做两个可辨认修改
  4. 步骤 3:只暂存一档,再练习还原
  5. 步骤 4:提交指定修改,再保留历史撤回
  6. 命令对照、常见问题与验收

目标与准备

先熟悉。工作目录是目前磁碟内容,暂存区是下一次 commit 要包含的内容,commit 是已记录的版本;三者可能不同。分支指向一条版本线,不会自动复制所有未提交档案。要同时在多份目录工作,另看,不要把建立分支当作完成备份。

步骤 1:建立独立基准

在不属于其他专案的新资料夹 codex-git-lab 放入 expected 的五个档案。用编辑器开该资料夹与终端机,PowerShell 用 Get-Location、macOS/Linux 用 pwd 核对位置,再跑 git --version。若系统找不到 git,先依平台的 Git 官方安装说明完成,重开终端机;不要在原本工作库执行接下来的初始化。

终端机:独立 Git 基准 · sh
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:在分支上做两个可辨认修改

终端机:建立分支 · sh
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 注解必须保留在工作目录但不能混入标题提交;两个改动都是教材,无正式资料。

附加到档案:style.css · css
/* KEEP-MY-NOTE */
终端机:检查差异 · sh
git status --short
git diff -- index.html style.css

diff 的减号是旧行,加号是新行,周围未改内容提供定位。检查 index.html 是否只改 h1,style.css 是否只多注解,不能只看「2 files changed」。如果请 Codex 说明,使用下列唯读要求,让它辨认现有工作及本次范围;不要一开始就叫它提交所有差异。

Codex 提示词:唯读核对范围 · text
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:只暂存一档,再练习还原

终端机:限定暂存 · sh
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 的不同版本。

终端机:同档案的暂存与未暂存差异 · sh
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 必须保留。

终端机:先移出暂存,再还原 · sh
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 的档名清单确认真正提交了什么,不把终端机显示成功当作范围一定正确。

终端机:核对并提交标题 · sh
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。正式工作若仍有其他修改,不照搬这个清理步骤,先保存或另行处理。

终端机:结束注解练习并撤回提交 · sh
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 是验证还原;下一步看。

19. Git、分支、diff 与还原 — 实作顺序示意图,非产品介面截图。 Branch → Diff → Commit
19. Git、分支、diff 与还原 — 实作顺序示意图,非产品介面截图。 Branch → Diff → Commit · 图片:Mokaair (© Mokaair)
阅读完整文字说明

Branch to Diff to Commit

回总目录

  • 生活分享

    Codex 学习中心:完整教程目录

    从安装、第一个任务到 MD 规则与进阶集成,规划 60 篇 Codex 教程、十个单元。按程度、平台、需求或命令搜索下一篇;尚未公开的教程会标示状态,方便安排学习路线。

  • 生活分享

    实战:制作小网站

    从 brief.md 规划并制作 Small Steps 待办网站,完成新增、完成、删除、筛选与本机资料保存。将 HTML、CSS、资料函式、画面事件与测试分开,以 Node 测试和浏览器操作验收,并留下可重新启动与还原的交接纪录。

  • 生活分享

    用量与效率:减少重工

    记录任务条件、模型选项、时间与成果,找出能减少无效重试和过多上下文的调整。

最新旅游情报攻略

资料来源

生活分享