Git 版本控制与跨平台协作
10.1 Git数据流向
Tip
每一个 Git Commit,都是你为了防止世界毁灭而存的档。
1. 为什么要学这个?
你写代码时肯定遇到过:改乱了,想回到昨天下午 2 点的样子,也是不可能的。
你只能拼命按 Ctrl+Z,直到手抽筋。
甚至,你误删了一个文件,然后把回收站清空了...
Git 就是你的"时光机" + "后悔药"。但如果你不理解它的原理,这颗后悔药可能会变成毒药(比如误用 git reset --hard)。
2. 核心概念:三个平行宇宙
新手最大的困惑:我 add 了但没 commit,东西去哪了?
想象你在 淘宝购物:
1. 工作区 (Workspace) = "商场货架"
- 这就是你现在的项目文件夹。
- 你在上面写写画画,随意修改。
- 这里的任何改动,如果没有"拿起来",随时会被售货员(系统)清理掉。
2. 暂存区 (Staging Area) = "购物车"
- 执行
git add。 - 你把商品从货架上拿下来,放进了购物车。
- 你可以随时把不满意的商品拿出来 (
restore),这还没扣款。
3. 本地仓库 (Local Repository) = "支付成功的订单"
- 执行
git commit。 - 结账! 生成了一张发票 (Commit ID)。
- 这一刻,你的商品被永久封存。哪怕商场倒闭了(工作区全删了),你凭发票也能找回东西。
3. 适用场景 (WHEN)
- git add: "这个文件我改好了,先放进篮子。"
- git commit: "这一组功能(比如登录页面)全做完了,打包存个档。"
- git push: "把我的存档同步到云端备份。"
4. 解决方案 (HOW)
购物流程图解
| Git 命令 | 现实映射 | 状态 | 潜台词 |
|---|---|---|---|
| 写代码 | 逛货架 | Untracked / Modified | "随便看看" |
git add |
放入购物车 | Staged | "这个我要了" |
git commit |
结账开发票 | Committed | "老板,买单!" |
git push |
快递寄回老家 | Remote | "云端备份" |
数据流向图
graph TD
WS["工作区 (货架)"] -->|"Step 1: git add"| Stage["暂存区 (购物车)"]
Stage -->|"Step 2: git commit"| Repo["本地仓库 (已付款)"]
Repo -->|"Step 3: git push"| Remote["远程GitHub (云端)"]
Repo --"我想退货 (reset)"--> Stage
Stage --"放回货架 (restore)"--> WS
style WS fill:#fff9c4,stroke:#fbc02d
style Stage fill:#e1bee7,stroke:#8e24aa
style Repo fill:#c8e6c9,stroke:#2e7d32
style Remote fill:#bbdefb,stroke:#1565c0
5. 真实案例
Story
《玩具总动员 2》的惊魂 24 小时
1998 年,皮克斯在制作《玩具总动员 2》。
一位员工在清理文件时,误输入了 rm -rf * (Linux 下的删库跑路命令)。
眼看着屏幕上的文件一个个消失,伍迪和巴斯光年正在被抹除。
更绝望的是,公司的备份服务器恰好坏了,没有人知道。
电影差点因此夭折。
谁拯救了世界? 技术总监 Galyn Susman。她刚生完孩子,为了照顾宝宝,她在家里装了一套工作站办公。 她的电脑里,刚好有 2 周前同步 (Pull) 下来的完整仓库。 她的这台个人电脑,成为了这部电影的"诺亚方舟"。
Vibe 心法:Git 是分布式的。这意味着每个人电脑里都有一份完整的历史备份。只要有一个人的电脑还在,代码就不会死。这就是为什么我们强推 Git 而不是传统的集中式 SVN。
6. 本章小结
- 购物车原则:
add是挑选,commit是买单。 - 原子性:不要把 10 个无关的功能一次性买单(commit),万一要退货(回退)你会哭的。
- 分布式:你的电脑就是备份中心,多
push,多pull。