🎓 第一章:Git 简介 —— 时光机的说明书
什么是 Git?
同学们,想象一下你正在写一本小说。写到第 50 章的时候,你突然觉得第 3 章的结局才是对的,想改回去——但你已经改过 8 次了,根本记不清当时写了什么。
如果有一台"时光机",能让你在任意版本之间自由穿梭,那该多好?Git 就是代码世界的时光机。
Git 是一个分布式版本控制系统(Distributed Version Control System),由 Linux 之父 Linus Torvalds 在 2005 年创造。没错,就是那个创造 Linux 的大佬——据说他只花了大约 10 天就写出了 Git 的第一个版本。大佬的世界,我们不懂。
💡 提示: 通俗理解:Git 就是你代码的"存档系统"。游戏里你每过一关都会存档,Git 也一样——只不过它存的是你的代码,而且可以随时回到任何一个存档点。
为什么不用"复制文件夹"的方式管理版本?
我知道,你可能在想:我直接把文件夹复制一份,命名为 项目_v1、项目_v2、项目_最终版、项目_最终版_真的最终、项目_最终版_打死不改……
别笑,这事儿我当年真干过。结果呢?
- 硬盘里堆满了 20 个几乎一样的文件夹,空间告急
- 完全不记得哪个版本改了什么
- 想合并两个版本的改动?手动来?别闹了
- 和队友合作?互相发压缩包?想想就头大
Git 优雅地解决了这一切。
集中式 vs 分布式
在 Git 出现之前,主流的版本控制系统是集中式的,比如 SVN、CVS。它们的工作方式就像一个班级共用一本笔记:
text
📦 集中式版本控制 (如 SVN)
┌─────────────┐
│ 中央服务器 │ ← 所有版本历史都在这里
└──────┬──────┘
│ 网络
┌────┼────┐
│ │ │
▼ ▼ ▼
小明 小红 小刚 ← 每个人只有最新版本问题很明显:服务器挂了 = 全班作业没了。网断了 = 没法干活。
text
🌐 分布式版本控制 (如 Git)
┌──────┐ ┌──────┐ ┌──────┐
│ 小明 │ │ 小红 │ │ 小刚 │
│(完整 │ │(完整 │ │(完整 │
│ 历史) │←→ │ 历史) │←→ │ 历史) │
└──────┘ └──────┘ └──────┘
每个人都有完整的仓库!可以离线工作!📝 备注: 记住这个关键区别:集中式只保存文件的"差异"(delta),而 Git 保存的是文件的"快照"(snapshot)。每次提交,Git 就像拍了一张照片,记录下当时所有文件的完整状态。虽然听起来更占空间,但 Git 很聪明——没有变化的文件,它只存一个指针,不会重复存储。
快照 vs 差异
| 对比项 | 快照 (Git) | 差异 (SVN/CVS) |
|---|---|---|
| 存储方式 | 每次提交保存完整快照 | 保存相对于上一版本的差异 |
| 查看历史版本 | 直接取出,速度极快 | 需要从头逐步还原 |
| 分支成本 | 几乎为零(创建一个指针) | 需要复制整个目录 |
| 离线工作 | 完全支持 | 不支持 |
| 数据完整性 | SHA-1 哈希校验 | 依赖服务器 |
Git 的设计哲学
理解了这些哲学,你会觉得 Git 的命令设计非常合理:
- 完整性优先—— Git 用 SHA-1 哈希值来标识一切,任何改动都无所遁形
- 只增不减—— Git 几乎从不删除数据,大多数操作只是添加新数据
- 本地为王—— 绝大多数操作都在本地完成,速度快到飞起
- 三态设计—— 已修改、已暂存、已提交(后面会详细讲)