跳转至

Git 教学

这一部分从第一性原理解释 Git。目标不是教你背命令,而是让你真正理解:为什么 Git 的对象模型、暂存区、提交图、分支和合并会长成今天这样。

为什么要先学原理

很多人会用 Git,但对 Git 的理解停留在“背命令”:

  • git add
  • git commit
  • git checkout
  • git merge

命令当然重要,但如果你不知道背后在变化的到底是什么,你就很难理解这些问题:

  • 为什么 add 不是“直接提交”;
  • 为什么 commit 本身不保存分支名;
  • 为什么 branch 这么轻;
  • 为什么 merge 有时候能自动完成,有时候会冲突;
  • 为什么 Git 可以高效去重和传输历史。

这一部分讲什么

这一组页面会按顺序讲:

  • Git 对象模型;
  • Index 与暂存区;
  • Commit 与 DAG 历史;
  • merge 与冲突;
  • packfile 与远端传输基础。

最重要的视角切换

学习 Git 时,最关键的一步是把脑子里的模型从“Git 管文件夹”切换成“Git 管对象和引用”。

Git 并不是以“项目目录名”或者“文件路径名”作为根本身份。它真正关心的是:

  • 内容是什么;
  • 内容组成了什么 tree;
  • 哪个 commit 指向哪个 tree;
  • 哪个 ref 指向哪个 commit。

一旦你完成这次视角切换,很多平时看起来神秘的行为都会变得可解释。

怎么读这一部分

建议按这个顺序读:

  1. Git 对象模型
  2. Index 与暂存区
  3. Commit 与 DAG
  4. 合并冲突
  5. Packfile

这条顺序和 Git 本身的结构是对齐的:先有对象,再有暂存区和快照,再有历史图,最后才有合并和传输。