Git Mental Model
September 7, 2026 · View on GitHub
这篇是 Git 心智模型系列的总入口。四区域模型适合快速判断日常操作,更深入的系列会从快照、对象、引用和历史变化解释 Git 为什么这样工作。
先了解为什么在 AI 时代学 Git,再打开交互学习。完整学习路径把十个递进主题的文章、交互和临时仓库实验放在同一顺序中。知识地图说明这条原理路径在什么情况下进入一次变更或协作决策。
旗舰系列
- 快照与状态:HEAD、Index 与 Working Tree · 交互 · 实验
- 对象图:blob、tree 与 commit · 交互 · 实验
- Index 是下一次 commit 的草稿 · 交互 · 实验
- 引用、HEAD 与身份 · 交互 · 实验
- 可达性、reflog 与恢复 · 交互 · 实验
- Merge 先找共同祖先,再合并两条历史 · 交互 · 实验
- Rebase 重放变化,分支引用指向新历史 · 交互 · 实验
- 远端是另一仓库,origin/main 是本地记录 · 交互 · 实验
- Worktree 共享对象,隔离检出状态 · 交互 · 实验
- 逻辑快照与物理存储是两层问题 · 交互 · 实验
第一章通过同一个文件的三个版本,演示 git add 和 git commit 实际记录什么,并提供交互演示和可运行实验。
第二章沿 commit 进入对象库,拆解 blob、tree 与 commit 的责任边界,并提供对象图交互演示和可运行实验。
第三章深入 Index,演示部分暂存、git diff --cached、安全取消暂存与冲突 stage 1、2、3,并提供Index 草稿交互演示和可运行实验。
四区域快速模型
理解 Git,先理解四个区域:
working tree -> index -> local repository -> remote repository
Working tree
你正在编辑的文件。
查看:
git status
Index
也叫 staging area,表示下一次 commit 会包含什么。
git add <file>
git diff --cached
Local repository
本地 commit 历史。
git log --oneline
Remote repository
远端仓库,比如 GitHub 上的 origin。
git fetch
git pull --rebase
git push
Key idea
这张图是操作概览,不表示文件只能处于一个区域,也不表示每次操作都把文件搬走。工作区、Index 和 HEAD 可以同时表示不同版本;远端也是一个仓库,拥有自己的对象和引用。
先比较版本和引用,再判断操作会改变什么。分支是指向 commit 的引用,commit 关联快照;不要把分支理解成另一份目录。
常见命令对应关系
| 命令 | 主要影响 |
|---|---|
git add | 工作区 -> 暂存区 |
git commit | 暂存区 -> 本地仓库 |
git restore | 丢弃或恢复工作区内容 |
git restore --staged | 默认用 HEAD 恢复 Index,Working Tree 保持不变 |
git push | 本地仓库 -> 远端仓库 |
git fetch | 远端仓库 -> 本地远端引用 |
git pull | fetch + merge 或 fetch + rebase |
为什么这个模型重要
很多 Git 事故都来自没有判断清楚当前改动在哪个区域。
例如:
- 要保留工作区改动,先保存现场;
restore工作文件可能丢弃编辑,不能当作通用保存操作。 - 只想取消暂存,
git restore --staged更新 Index,保留工作区。 - 要修改已有提交,先确认引用、共享情况和备份;
reset的不同模式对工作区影响不同。 - 已共享历史通常通过
revert追加撤销提交;数据库和外部副作用还需要另行处理。
先判断区域,再选择命令,是 Git 排错的第一原则。