GIT / FIELD ATLAS

分布式版本控制 · 深度学习档案

Git 全景认知地图:从平行世界到可验证工程

概念、类比边界、恢复策略、协作流程与 AI 时代最佳实践

2026.08.18 事实 / 类比 / 边界 / 实践 PARTIAL

先记住这一句

THE MENTAL MODEL

Git 是一套用不可变快照保存项目状态、用提交关系图表达因果、用可移动指针管理路线、用显式整合处理分歧的分布式版本控制系统。

它不是自动备份,不是 GitHub,也不只是“撤销按钮”。它真正降低的是试错、并行、审查和恢复的成本。

核心录音给出的直觉是:Git 是“平行世界的时光机”。这个类比很有力量,因为它让分支实验、选择路线和回到历史节点变得可感知;但它还不够精确。完整模型需要再补三块:

  1. 快照不是录像:Git 不会记录每一次编辑,只记录你明确选择并提交的状态。
  2. 分支不是文件夹副本:branch 主要是一个指向 commit 的可移动引用;worktree 才是额外的物理工作目录。
  3. 合并不是自动判对:Git 能处理文本与图结构,却不能替你判断产品语义、业务意图和结果是否正确。

1. 学习目标与资料边界

你读完后应能回答什么

资料权重

2. 三组主类比:先搭桥,再检查桥会在哪里断

A. 档案馆 + 时光机

Git 概念 类比映射 准确之处 不准确之处 / 失效边界
repository 整座档案馆 保存对象、引用与历史关系 Git 仓库不是给人直接翻阅的普通文件柜;底层是内容寻址对象库与引用
working tree 馆外工作桌 你正在编辑、可能凌乱、尚未归档的现场 工作桌上的内容并不自动安全;未提交内容可能丢失
index / staging 待入库清单 精确决定下一只档案袋装什么 它不是简单“缓存”;同一文件可以只暂存部分 hunk
commit 有编号的档案袋 / 存档点 固化一次有意图的项目状态,并连接父提交 commit 不是手动复制整套文件;未变化内容通过对象复用避免重复
log 档案目录 能沿父关系追溯历史 日志展示顺序不等于唯一真实因果;历史是 DAG,不总是一条线
restore / revert 取回旧档 / 新增纠错档 能恢复旧内容或记录反向变更 不是所有未提交内容都可恢复;revert 也可能冲突

最有用的直觉:commit 不是“保存一下”,而是“让项目历史多出一个可解释、可定位、可审查的节点”。

类比边界:真实时光机暗示“过去被改变后现在自动跟着改变”;Git 的 commit 通常不可变。所谓改写历史,实际上是生成新 commit 并移动引用,旧对象在一段时间内可能仍可由 reflog 找到。[G2][G9]

B. 平行世界 + 独立房间

Git 概念 类比映射 准确之处 不准确之处 / 失效边界
branch 一条平行剧情路线 从共同起点产生不同后续,便于独立试验 branch 本身不是独立目录,也不是复制出的完整宇宙;它是 ref
merge 两条剧情线汇合 保留或整合两边有效变化 不是机械“选一个”;可能要逐处裁决,且文本无冲突仍可能语义错误
rebase 把剧情搬到新起点重演 让一组提交基于新的祖先重新生成 会产生新 commit ID;共享后使用会让协作者的历史基础失配
worktree 给每条路线一间独立工作室 多个分支可同时出现在不同目录里,减少工作区相互覆盖 多个房间仍共享同一仓库管理数据;同一分支通常不能同时检出到多个 worktree
PR 把候选剧情送进编辑会 聚合 diff、讨论、检查和合并决定 PR 属于托管平台协作层,不是 Git 核心对象

核心录音的小说案例非常适合这个类比:先提交“16 年前发生凶案、16 年后发现尸体”的共同世界,再用多个 branch 尝试不同主角,最后选择、组合或放弃路线。[N1]

类比边界:删除 branch 只是删掉路标,不保证相关 commit 立刻从对象库消失;同样,保留 branch 也不等于成果已经验证正确。

C. 物流网络 + 可移动路标

这组类比最适合解释 remote、fetch、push 和引用。

Git 概念 类比映射 准确之处 不准确之处 / 失效边界
object 有内容指纹的标准货箱 相同内容可复用;内容决定身份 Git 对象不是业务文件本身的简单压缩包
commit graph 带前序关系的运输网络 能表达从哪里来、在哪分叉、在哪里汇合 不是按时间排队的单线铁路;时间戳也可能不可靠
branch / tag 路标 / 固定里程碑 给难记的 commit ID 提供名字 tag 通常不自动移动;branch 会随提交前移
remote 另一座仓库站点的地址别名 可以交换对象和引用 remote 不是天然“权威中心”;权威来自团队约定和权限策略
fetch 把对方最新货物清单运到本地观察区 获取对象并更新 remote-tracking refs,不自动改当前工作 本地看到的是最近一次 fetch 的视图,不是实时直播
push 请求远端移动它的路标 发布对象并更新允许移动的远端引用 远端可以拒绝;push 不是“本地保存”

类比边界:网络同步不是把目录做字节级镜像;Git 交换的是对象和引用,并受可达性、权限、fast-forward 与服务端规则约束。[G7][G8]

3. Git 的物理世界:对象、图、引用、现场

四层总图

3.1 Blob:只关心内容,不关心文件名

3.2 Tree:目录快照的结构

3.3 Commit:快照 + 元数据 + 父关系

一个 commit 至少表达三件事:

  1. 项目当时的根 tree;
  2. 作者、提交者、时间和 message;
  3. 零个、一个或多个父 commit。

首个 commit 没有父;普通 commit 通常一个父;merge commit 通常两个或更多父。commit ID 因内容与父关系而定,所以 rebase 即便得到相同文件结果,也会生成身份不同的新 commit。[G2][G5]

3.4 DAG:历史不是时间线,而是因果图

3.5 Ref:给 commit 起一个会移动的名字

3.6 Reflog:引用移动的本地黑匣子

4. 三棵树模型:绝大多数操作都在移动“内容”或“指针”

现场

Working Tree

磁盘上能看见、能编辑的文件。可以包含未跟踪和未暂存变化。

edit · status · diff
选择 →
候选快照

Index / Staging

下一次 commit 准备记录的准确内容。是语义拆分层,不只是中转站。

add · restore --staged
固化 →
历史基线

HEAD Commit

当前检出路线的历史节点;commit 后 branch 通常移动到新节点。

commit · show · log

理解三棵树,才能区分三种 diff:

想看什么 比较关系 常用观察
尚未暂存的变化 working tree ↔︎ index git diff
已暂存、即将提交的变化 index ↔︎ HEAD git diff --staged
当前所有已跟踪变化 working tree ↔︎ HEAD git diff HEAD

最关键的因果:git add 不是“把文件标记一下”,而是把当下内容写入 index。之后继续编辑同一文件,working tree 与 index 会再次不同。[G1]

文件状态

5. 核心概念地图:名词、动作、目的、边界

5.1 建仓与获取

概念 它改变什么 正确心智模型 典型陷阱
init 创建仓库元数据 让现有目录开始拥有 Git 对象与引用空间 不要在未知目录或用户根目录盲目 init
clone 创建本地仓库、工作区与 remote 配置 拿到可工作的历史副本,而非下载 ZIP 克隆通常不是备份策略的全部
bare repository 只有仓库数据,无普通工作区 常用于服务端或集中交换 不适合直接编辑项目文件

5.2 观察与比较

概念 回答的问题 最佳实践
status 现在站在哪条分支?哪些文件在哪一层变化? 高风险操作前后都看;机器集成可用 porcelain 格式
diff 两个状态之间具体差什么? 提交前读 unstaged + staged diff;大改用 --stat 先看边界
show 某个对象/commit 包含什么? 核验单个交付节点,而不是只信 commit message
log 历史关系和说明是什么? 图形化查看分叉;按文件、作者、路径、范围缩小
blame 每行最后由哪个 commit 改动? 用于寻找上下文,不用于“甩锅”;结合 commit 说明和 PR 阅读
bisect 哪个 commit 首次引入回归? 准备可靠的 good/bad 判据;可接自动测试,复杂度近似对数级

5.3 形成提交

概念 本质 最佳实践
add 更新 index 按意图选择文件或 hunk;不要默认全塞
commit 从 index 建快照并连接父历史 一个 commit 一个可解释、可验证、可独立回滚的语义变化
amend 用新 commit 替换分支尖端 只整理尚未共享的最近提交;共享后慎用
commit message 给未来读者的因果说明 标题写做了什么,正文解释为什么、约束和副作用;不要只写 update
trailer 结构化提交元数据 可记录任务、协作者、签署或审查信息;先与团队约定字段

原子提交不是“越小越好”。它的尺度应满足:只有一个意图、节点可构建/验证、撤销时不会带走无关变化、审查者能形成完整判断。[N3]

5.4 指针与路线

概念 本质 什么时候用
branch 可移动 ref 为任务、假设、修复或发布线命名
switch 切换 branch 或创建后切换 日常分支切换,语义比旧式 checkout 更聚焦
detached HEAD HEAD 直接指向 commit 查看历史、临时实验;要保留新提交需及时创建 branch
tag 稳定里程碑引用 标记版本、交付点;发布场景优先 annotated/signed tag 取决于策略
branch protection 托管平台规则 限制直接推送、要求审查和 checks;不是 Git 核心能力

5.5 临时搁置与多现场

概念 本质 适用 / 不适用
worktree 同一仓库挂接多个工作目录 并行任务、长测试、多个 Agent;避免一个目录频繁切换
sparse checkout 工作区只呈现路径子集 大型单仓库减少检出范围;不是删除其他历史

5.6 远程交换

概念 事实 容易混淆的边界
remote 另一仓库位置的别名 origin 只是默认名字,不天然是权威
fetch 取对象并更新 remote-tracking refs 不整合当前 branch,适合先观察
pull fetch 后再 merge 或 rebase 会改变当前历史/工作状态,不只是下载
push 发送对象并请求更新远端 ref 可能被 non-fast-forward、权限或保护规则拒绝
upstream branch 当前 branch 默认比较/拉取/推送目标 “upstream 仓库”与“上游分支配置”是相关但不同语境
refspec 定义本地与远端引用怎样映射 高级能力;不理解时不要让自动化随意改

6. 分叉与整合:merge、rebase、squash、cherry-pick

一张决策表

目标 首选候选 历史结果 主要风险
保留真实分叉与合流 merge 可能产生双父 merge commit 历史更复杂;冲突仍需裁决
让未共享功能分支基于新主线重放 rebase 生成一串新 commit,线性化 改变 ID;共享历史会让协作者分叉
主线只保留一个功能级节点 squash merge 多个分支提交压成一个主线 commit 丢失分支内部细粒度因果
只搬运一个明确修复 cherry-pick 在当前位置生成等价变更的新 commit 重复变更可能给后续 merge 制造困惑
目标分支只是落后、没有分叉 fast-forward 只前移 ref,不产生 merge commit 容易让人误以为“merge 什么都没做”

Merge:保留两条历史的会面

Git 通常先找共同祖先(merge base),再比较两条路线相对祖先的变化。没有重叠歧义时可自动组合;有歧义时把冲突交给人。真正的 merge commit 同时指向两个父节点,因此保留“这两条历史在这里会面”的事实。[G4]

准确类比:两位编辑分别在同一旧稿上修订,最终拿旧稿、甲版、乙版三份材料对照整合。

边界:没有冲突只说明 Git 在文本/路径层面找到可组合结果,不代表接口语义、数据库迁移顺序、权限逻辑或 UI 行为正确。[N3]

Rebase:换一个祖先重新演算

Rebase 会找出当前路线独有的提交,把这些变化在新基线之上依次重放,生成新 commit。文件最终内容可能与 merge 相似,但历史身份和叙事不同。[G5]

建议:

Squash:把过程压成一个交付节点

Squash 适合把大量 WIP/修正提交整理为一个主线语义单元。它改善主线可读性,但会丢掉分支内部可独立定位/回滚的细节。不要把“整洁”绝对化:调试与审计同样需要有意义的中间节点。

Cherry-pick:摘取变化,不搬整条路线

适合把已知修复搬到 release branch,或从实验中选取一个独立成果。它创建新 commit,不能把两个相似 ID 当成同一个历史节点。频繁 cherry-pick 往往暗示分支策略或发布线管理需要重看。

7. 撤销与恢复:先判断“要撤销哪一层”

01只是想看

先 status / diff / log / reflog,不改变状态。

02改坏了未提交文件

restore 前先确认内容是否还有价值;未提交内容可能不可恢复。

03暂存错了

把内容从 index 移出,通常保留 working tree 修改。

04本地提交需整理
05共享提交有问题

优先新增 revert,保持审计和协作者基础稳定。

Restore、Reset、Revert 的对象不同

工具 核心作用 会不会新增 commit 会不会移动 branch 共享历史建议
restore 从某状态恢复 working tree / index 内容 否 否 适合文件级恢复,但会覆盖目标位置内容
reset 移动当前 branch,并按模式更新 index/working tree 否 是 主要用于尚未共享历史;hard 模式高风险
revert 计算指定 commit 的反向变化并提交 是 正常前进 共享历史的默认安全选择

Reset 三种常见模式

高风险边界

不要把 `reset --hard`、`clean -fd`、无保护 force push 当成“卡住时的万能修复”。它们可能让 Git 没有机会替你恢复未提交、未跟踪或远端新增内容。

Reflog 是恢复入口,不是永生保险

常见恢复思路:先停手 → 看 status → 看 reflog → 找到误操作前的 commit → 创建新 branch 指向它 → 再比较。不要一慌就继续 reset,连续移动指针只会增加认知负担。[G9]

Clean、Stash、未跟踪文件

8. Branch 与 Worktree:路线与房间

为什么只有 branch 仍可能不够

在单一工作目录里切 branch,会同时切换目录内容;未提交修改、构建产物、依赖缓存、正在运行的服务和终端上下文都可能阻碍或污染切换。多个 worktree 让不同 branch 同时出现在不同目录,各自拥有工作区和 index,同时共享仓库对象库。[G3]

Worktree 真正隔离什么

Worktree 不隔离什么

多 Agent 并行的最小治理模型

ROOM A

agent/reader-ui

只负责 reader 页面;独立 worktree;独立端口。

输出:原子 commits + 测试证据
ROOM B

agent/library-ui

只负责 library 页面;不动 reader 共享协议。

输出:原子 commits + 截图
ROOM C

agent/theme

只负责 tokens/主题;变更公共接口前先协调。

输出:影响清单 + 回滚点
INTEGRATION

human / lead

决定顺序、读 diff、处理共享语义、运行组合测试并合并。

输出:主线上的可信节点

建议:每个并发任务必须同时拥有五个边界:责任文件、branch、worktree、验证命令、完成定义。缺一项,就可能只是“并行活动”,不是“可整合的并行工作”。[N3][L6]

9. 远程协作:Git、GitHub 与发布层分开理解

Git ≠ GitHub

Fetch、Pull、Push 的精确区别

Fetch:先把信息拿回来

获取远端对象并更新本地 remote-tracking refs,不自动把它整合进当前 branch。适合“先看看大家发生了什么,再决定怎么接”。[G7]

Pull:获取 + 整合

通常等价于先 fetch,再按配置或参数 merge/rebase。它会改变当前历史,因此在脏工作区或不清楚团队策略时,盲目 pull 容易把两个问题混在一起。[G8]

Push:发布历史并申请移动远端 ref

它不是保存动作,而是协作动作。non-fast-forward 拒绝意味着远端 ref 已含你本地没有纳入的历史,系统在阻止静默覆盖。[G8]

PR、Issue、Fork、Release

平台概念 核心作用 与 Git 的关系 常见误区
Pull Request 提议把一组变化整合到目标分支 围绕 commits、diff 和目标 ref 建协作上下文 不是 git pull
Issue 记录问题、任务、讨论或提案 可与 branch/commit/PR 关联,但不是 Git 对象 Issue 关闭不等于代码已经验证发布
Fork 托管平台上的关联仓库副本 常用于无直接写权限时贡献 不是 branch;拥有独立远端仓库关系
Release 面向使用者的版本交付页面/资产 常基于 tag,并附二进制、说明与链接 tag 不自动等于经过验证的 release

10. 冲突:Git 把无法替你决定的歧义显性化

冲突的三层

  1. 文本冲突:同一区域存在无法自动组合的修改,Git 标出冲突块。
  2. 结构冲突:重命名、删除/修改、目录变化等让路径关系不明确。
  3. 语义冲突:文本可自动合并,但两边对接口、数据、权限或业务规则的理解互相矛盾。第三类最危险,因为 Git 可能显示“合并成功”。[N3]

安全处理顺序

  1. 停止继续叠加无关修改;
  2. 看 status,确认正在进行 merge、rebase 还是 cherry-pick;
  3. 找 merge base,理解两边各自意图,而不只是删除冲突标记;
  4. 在目标文件里形成第三个正确版本;
  5. 搜索冲突标记是否清理干净;
  6. 运行相关测试、类型检查、构建与关键路径;
  7. 阅读最终 diff,再完成整合;
  8. 如果不确定,使用对应 abort 返回操作前状态,而不是强行提交。

Rerere 与复用冲突解决

Git 的 rerere 能记录并复用曾经的冲突解决方式,适合重复 rebase/merge 的团队;但自动复用的结果仍需验证,尤其当语义背景已改变。

11. 历史诊断:把 Git 从“保存工具”升级为调查系统

Log:先看图,再看故事

任何一层缺失,历史解释力都会下降。只看 log --oneline 很快,但可能把复杂因果压扁成标题列表。

Bisect:对提交图做二分实验

给定一个已知 good 节点和一个已知 bad 节点,Git 选择中间候选让你测试,从而不断缩小引入回归的范围。它的力量依赖两个前提:

巨型 commit 即使被 bisect 命中,内部仍然难定位,这正是 atomic commit 的工程价值。[N3]

Blame:找上下文,不找罪人

行级最后修改者只是调查入口;真正原因可能在更早重构、自动格式化、代码生成或需求变化里。正确用法是从行追到 commit,再追到 diff、message、PR 和测试。

12. 配置、忽略、钩子与仓库边界

Config 的作用域

常见层级包括 system、global、local/worktree 等;后者覆盖前者。重要的不是背路径,而是每次知道“这个配置影响谁、在哪里定义、能否被仓库携带”。

.gitignore 不是安全工具

Hooks:本地自动化触点

hooks 能在 commit、merge、push 等事件前后运行检查或自动化。客户端 hook 默认不会随 clone 自动启用,因此关键治理不能只依赖个人本地 hook;服务端保护、CI 和可重复脚本更可靠。[G10]

Submodule、Subtree、Monorepo

Git LFS 与大文件

Git 擅长文本和可差异审查的内容;视频、模型权重、大型设计源文件会放大 clone、存储和历史成本。LFS 用小指针替代普通 Git 对象中的大文件内容,但仍需服务端、配额、备份与迁移策略。

13. 安全与可信历史

Git 是证据链的一部分,不是全部

敏感信息进入历史后的原则

  1. 先轮换/吊销凭据,把泄露视为已经发生;
  2. 再评估历史清理范围、所有克隆与远端镜像;
  3. 使用专门工具重写历史并协调所有协作者;
  4. 增加 secret scanning、pre-commit 检查和服务端保护;
  5. 不要只做一次“删除文件”的新 commit 就宣布处理完毕。

备份边界

Git 能通过多个 clone 提供分布式冗余,但它不天然覆盖未提交工作、外部数据库、LFS 对象、Issue/PR 讨论、CI secrets、Release 附件或托管平台元数据。重要项目仍需独立备份和恢复演练。

14. 最佳实践:个人、团队、AI Agent 三种工作流

14.1 个人创作者 / 独立开发者

  1. 一个真实目标,一条实验路线:只有存在真实不确定性时分支;分支名写任务或假设。
  2. 提交前完成观察三件套:status → diff → 测试/预览。
  3. 按意图提交:HTML、文档、Skill 和代码都遵守一个 commit 一个完整意图。
  4. 公开前做隐私检查:绝对路径、真实 IP、邮箱、密钥、内部状态与用户数据。
  5. 设置远端但不把远端当唯一备份:验证能从干净环境恢复。

14.2 小团队

  1. main 受保护,默认通过 PR 合并;
  2. required checks 与实际风险匹配:测试、类型、构建、安全扫描;
  3. code owners 或模块 owner 负责公共接口;
  4. PR 说明目标、范围、风险、验证、回滚和截图;
  5. 统一 merge/rebase/squash 策略,不让每个人临时发明历史风格;
  6. release tag、制品和部署环境都能追溯到 commit;
  7. 定期验证恢复、权限和分支保护,而不是只配置一次。

14.3 AI Agent 工作流

界定任务→独立 branch/worktree→读代码与测试→小步修改→机器验证→人读 diff→受控合并

15. 提交与 PR:让历史成为未来 AI 可读的知识库

Commit message 模板

<type>: <一句话说明语义变化>

为什么:原问题、约束或决策背景
怎么验证:测试、构建、截图或最小探针
限制:未覆盖范围、兼容性或后续工作

不要机械追求 Conventional Commits;它只是可选协议。真正目标是让节点的意图、范围和验证可恢复。

PR 最小信息

16. 常见误区与纠偏

诱人的错误相信 为什么会信 更准确的模型 纠正提示
commit = 保存 GUI 常把 stage + commit 合成按钮 commit 从 index 创建历史节点 先问:下一张快照到底包含什么?
Git 记录每次修改 “时光机”类比太强 Git 只记录提交过的状态 未提交内容不自动安全
Git 每次只存 diff GitHub 主要展示差异 逻辑模型是快照;diff 是状态比较视图 把 snapshot 和存储优化分开
branch = 项目副本 切换后文件真的变了 branch 是 ref;工作树呈现被引用快照 路线不是房间
worktree 消灭冲突 工作目录独立了 只减少现场覆盖;整合仍可能冲突 隔离执行 ≠ 自动集成
pull = 下载 名字像“拉取文件” fetch + 整合 想只观察就先 fetch
PR = pull 英文相近 PR 是平台上的合并提议 命令与协作页面分开
merge 成功 = 正确 Git 没报红 只说明算法得到文本结果 组合测试 + 人工语义审查
rebase 只是美化 文件结果看起来相同 它生成新 commits、改变身份与因果 共享历史先问谁依赖它
reset = 撤销 名字像恢复出厂 它移动 ref,并可能更新 index/工作区 先判断要撤销哪一层
.gitignore 能防泄密 文件不会出现在 status 已跟踪内容仍在历史,规则也可能漏 secret scan + 权限 + 轮换
测试绿 = 可发布 自动检查给出强心理信号 测试只覆盖写下的假设 补关键路径、边界与人工验收

17. 场景手册:遇到什么情况,先想到什么

想尝试两个 UI 方向

建议:从同一基线开两个 branch;需要同时运行就用两个 worktree。分别定义截图、交互和验收标准,最后比较证据,而不是让两个 Agent 在同一目录互改。

AI 一次改了几十个文件

先做:status / diff --stat / 按目录看 diff。确认是否混入格式化、锁文件、生成物、调试代码和不相关重构。必要时重新拆任务,不要用一个巨型 commit 把混乱合法化。[N3]

本地提交很乱但还没推送

建议:先建临时恢复 branch;再用交互式 rebase、reset mixed 或分段暂存整理成语义 commits;每个节点重新验证。

已推送的提交要撤销

默认:新增 revert,使团队看到错误与修复;除非团队明确协调历史重写,否则不要用 force push 擦除共享事实。[G7]

Pull 产生冲突

先拆问题:先 fetch,观察本地 branch 与 origin/... 的分歧;再选择 merge 或 rebase。不要让“下载”和“整合”同时发生后才开始理解。

误删 branch / 误 reset

先停手:看 reflog,找到原尖端,创建恢复 branch。不要继续做清理和 GC。[G9]

想同步 Obsidian / 文档库

文本非常适合 Git;图片、附件和多设备自动同步需要额外策略。先 pull/fetch 再编辑、明确冲突处理,重要改动手动 commit/push。整体回退优先考虑新增 revert;文件级恢复可用 restore,但执行前确认未提交内容。[N5]

18. 一份够用的“观察优先”命令地图

先观察

git statusgit diffgit diff --stagedgit log --graph --oneline --decorate --allgit reflog

再形成节点

git add <path>git add -pgit commitgit show <commit>

隔离路线

git switch -c <branch>git worktree add <path> -b <branch>git branch --show-current

交换与比较

git fetch --prunegit log HEAD..origin/maingit diff HEAD...origin/maingit push -u origin <branch>

这不是让你背命令。你只需在 AI 执行前能回答:

  1. 它会改变 working tree、index、branch、对象库还是 remote?
  2. 它会覆盖未提交内容吗?
  3. 它会改写已经共享的 commit ID 吗?
  4. 完成后用什么证据验收?

19. 四周学习路线:从理解到真正会用

Week 1|看懂状态

Week 2|制造并比较路线

Week 3|恢复与调查

Week 4|Agent 与协作

20. Teach-back:完成学习闭环前仍缺的一步

请在下一轮用自己的话回答四件事:

  1. Git 保存的核心对象和历史关系是什么?
  2. working tree、index、commit、branch、HEAD 的关系是什么?
  3. branch 与 worktree 为什么一个是“路线”、一个是“房间”?
  4. 为什么共享历史出错时通常优先 revert,而不是 reset/rebase + force push?

届时使用 canonical prompt 8 做事实准确性、因果完整性、边界意识和遗漏概念校验。

自我拷问结论

资料索引

Git / GitHub 一手资料