Git Internals
Git 原理频道
把 Git 原理拆成多个原理点专题,从对象数据库、引用与 HEAD,到提交图与 packfiles,帮助你建立更稳定的底层心智模型。
Git Internals
推荐学习顺序
建议先掌握对象库和暂存模型,再进入 refs、提交图和存储维护这些更底层的原理。
Git Internals
代表专题
对象数据库、引用与 HEAD、可恢复性,是把命令行为真正看懂的三块核心底板。
Git Internals
原理点目录
从对象模型到提交图,再到 packfiles 与 refs,把原来的一篇原理说明拆成更适合逐篇学习和持续扩写的原理专题。
Git 对象数据库
理解 blob、tree、commit、tag 四类对象,以及 Git 为什么说自己是内容寻址的对象数据库。
Plumbing 与 Porcelain:Git 两层命令世界
理解 porcelain 与 plumbing 的分层,能帮助你看懂为什么有些 Git 命令偏“日常操作”,有些命令更像底层原语。
工作区、暂存区与对象库
理解 working tree、index 和 object database 这三层,是看懂 add、commit、restore、reset 的关键前提。
仓库布局、.git 目录与 GIT_DIR
理解 `.git` 目录、工作区、gitdir、common dir 和 worktree 之间的关系,能帮助你看懂仓库到底把什么放在了哪里。
Git 中的引用与 HEAD
把分支、标签、远端跟踪引用和 HEAD 放到同一个模型里,理解 Git 如何用名字指向提交。
远端跟踪引用
理解 `main` 与 `origin/main` 的区别,能够帮助你更稳定地掌握 fetch、pull、push 和分支同步。
修订选择、范围表达式与提交集合
很多 Git 命令真正处理的不是“一个提交”,而是一组通过 revision syntax 表达出来的提交集合。
Git 提交图与历史表达
理解为什么 Git 历史本质上是提交图,而不是简单时间线,以及 merge、rebase 如何重新表达这张图。
Git Packfiles 与对象存储
理解 Git 如何通过 packfiles、压缩和对象复用来高效存储与传输历史,而不是简单复制整份仓库。
传输协议、协商与 pack 交换
理解 fetch / clone / push 时的协商过程,能帮助你看懂 Git 不是在“整仓同步”,而是在交换对象与引用状态。
环境变量、仓库变量与 Git 运行上下文
理解 GIT_DIR、GIT_WORK_TREE、GIT_INDEX_FILE 等环境变量,能帮助你看懂 Git 如何决定“当前仓库上下文”到底是什么。
对象可达性与垃圾回收
理解对象为什么有时还能恢复、有时会永久丢失,本质上取决于可达性和垃圾回收,而不只是命令本身。
共同祖先与历史祖先关系教程
解释 Git 如何基于共同祖先判断分支差异、合并基础和历史可达性。
Tree 对象与目录快照教程
说明 tree 对象如何表达目录层级,以及提交为何能表示完整文件树快照。
Blob 对象与内容寻址教程
解释 blob 如何只按内容存储,以及哈希为什么成为对象身份。
提交对象、父提交与提交说明教程
说明提交对象如何把 tree、父提交和说明文本连接成历史图。
Refspec 与引用更新教程
解释 fetch 和 push 时 refspec 如何决定哪些引用被映射和更新。
三方合并机制
理解 Git 如何基于 merge-base 做三方合并,有助于准确判断冲突来源、合并结果与冲突解决策略。
重命名检测与差异算法
理解 Git 的 rename 检测与 diff 算法有助于解释“为何这个改动显示为删除+新增或重命名”,并优化评审可读性。
rebase 内部机制与 sequencer
从 sequencer 视角理解 rebase 的提交重放过程,帮助定位 rebase 中断、冲突恢复与历史重写后的提交变化。
hooks 与策略执行
理解本地 hooks 与服务端 hooks 的职责边界,帮助把提交与推送策略从“口头约定”转成“系统强制执行”。