学习 Git 不要一上来就死记命令,而要先理解它的核心模型,把 Git 想象成一个"时间旅行的文件系统 + 指针操作"。
Git的核心
Git 的世界里,一切都是提交(commit)和指针(reference)。
- commit:像一个"快照节点",记录某一时刻的文件状态。
- branch:其实就是一个指针,指向某个 commit。
- HEAD:是"当前工作指针",告诉 Git 你现在在哪个提交、在哪个分支上。
所以你会发现:
reset
、checkout
、merge
、rebase
......这些命令的本质,其实都是"移动指针 + 处理快照的方式"。
理解 Git 的学习顺序
作为踩过坑的过来人,我建议按这个顺序来学,像搭积木一样:
1. 文件的三个区域
这是最底层的模型,必须先懂:
- 工作区(Working Directory) :你正在编辑的文件。
- 暂存区(Stage/Index) :准备好要提交的内容。
- 本地仓库(Local Repository,.git/objects) :真正的提交历史。
👉 这一步理解之后,就能区分 add
、commit
的意义。
2. 提交(Commit)与快照
- 每次 commit 是整个项目的快照(而不是 diff)。
- 每个提交用一个 哈希值(SHA-1) 来标识。
- 提交之间通过 父指针 串联成链(A→B→C→D)。
👉 这一步理解后,才能明白"历史是链式结构,不是修改文件的日志"。
3. 分支(Branch)与引用(Reference)
- 分支本质上是"指向提交的可变指针"。
master
/main
、dev
这些都是分支名字,指向某个 commit。- 移动分支 = 改变指针。
👉 这一步理解后,就能明白 checkout branch
和 merge
的本质。
4. HEAD 指针
- HEAD 通常指向一个分支,而分支又指向一个提交。
- 如果 HEAD 直接指向某个提交,就叫"游离 HEAD(detached HEAD)"。
- 所有操作几乎都围绕"移动 HEAD"展开。
👉 这是理解 Git 的灵魂,reset、checkout、rebase 都是 HEAD 操作。
5. 分支操作的本质
在以上基础上,才去看:
merge
:把两个分支的历史合并 → 产生新快照。rebase
:把一段提交"重新播放"到新的基底。reset
:移动 HEAD,并决定是否丢掉暂存区/工作区的更改。checkout/switch
:切换 HEAD 到不同分支/提交。
👉 这一步是 Git 的高阶玩法,但有了前面理解,就不会再觉得神秘。
6. 远程仓库(Remote)与 push/pull/fetch
最后才看"分布式"的部分:
- 远程仓库就是另一个 Git 数据库。
fetch
拉取远程对象,不合并。merge
或rebase
把远程的改动整合到本地。push
推送本地分支指针到远程。
👉 理解完本地 Git 模型,再理解远程交互,就水到渠成了。
学习顺序总结(图谱)
学习 Git = 从小到大,从静态到动态,从本地到远程:
- 三大区域(工作区 / 暂存区 / 本地仓库)
- 提交(commit)快照模型
- 分支与引用
- HEAD 指针(灵魂概念)
- 分支操作(merge/rebase/reset/checkout)
- 远程仓库与协作(fetch/push/pull)
类比
如果把 Git 比作一本书:
- 工作区:草稿纸
- 暂存区:待出版清单
- 本地仓库:已经印刷的书页
- 分支:书签
- HEAD:你正在阅读的那一页
理解这几个关系后,你就真正"会 Git"了。