打开网易新闻 查看精彩图片

Git 官方文档有 160+ 条命令。Stack Overflow 每年新增 4 万条 Git 相关问题。但一位用了 12 年的开发者发现:他 90% 的工作只用到 7 个命令的组合

这不是偷懒,是认知重构——Git 不是词典,是状态机。

01 | 三个盒子:Git 的核心隐喻

01 | 三个盒子:Git 的核心隐喻

想象你在搬家。工作区(Working Directory)是客厅地上散落的杂物,暂存区(Staging Area)是贴好标签的纸箱,仓库(Repository)是已经封箱入库的存储间。

Git 的所有操作,本质上都是在问:东西现在在哪?要挪到哪?

新手常犯的错误是背命令。`git reset --soft HEAD~1` 和 `git reset --hard HEAD~1` 差一个单词,后果天差地别。但理解"三个盒子"后,你自然知道:soft 只动仓库指针,hard 连工作区一起清空。

开发者 Julia Evans 画过一张图:Git 命令像地铁线路图,站点是状态,换乘是操作。看懂地图的人不会死记每站名字,而是知道怎么从 A 到 B。

02 | 日常 Workflow:7 个命令的排列组合

02 | 日常 Workflow:7 个命令的排列组合

原文作者的工作流分成五个场景,每个场景 2-3 个命令。

场景一:开工

`git pull` 同步远程最新代码。`git checkout -b feature/my-feature` 切到新分支。这是 89% 开发者的标准起手式,但很多人漏了第一步——在旧分支上开新分支,等于把技术债一起打包带走

场景二:编码中

`git status` 的使用频率远超想象。作者说"比我预期的多得多",因为现代 IDE 虽然可视化状态,但命令行能精确告诉你:哪些在暂存区、哪些没跟踪、哪些被忽略。

打开网易新闻 查看精彩图片

`git add .` 是懒人写法,精确版是 `git add -p` 逐块审查。但日常开发中,"先全部上车再挑拣"更符合人类认知——提交前用 GUI 工具二次检查,比命令行交互更高效

场景三:快照

`git commit -m "Add feature X"` 的真正价值不在命令,在消息质量。作者特意标注:「Good commit messages matter more than the command itself」。

一个反直觉的数据:Google 内部代码库每天产生 4 万次提交,但 70% 的提交消息能在 50 个字符内说清。不是写不长,是强迫自己提炼。

场景四:冲突现场

`git push` 和 `git pull` 是冲突高发区。作者标注:「This is where most conflicts show up」。

这里的认知陷阱是:pull 其实是 `fetch + merge` 的缩写。当你看到 `Automatic merge failed`,本质是远程分支和你的本地分支在时间上分叉了。理解这一点,就不会再用"先备份再覆盖"的土办法

场景五:分支收尾

`git branch` 查看、`git checkout main` 切回主分支、`git merge feature/my-feature` 合并。作者说「Simple concept—but causes most real-world issues」。

GitLab 2023 年报告显示,34% 的生产事故与分支合并策略有关。不是命令难,是团队协作的约定没对齐:有人用 merge,有人用 rebase,有人强制 squash,历史记录变成 spaghetti。

03 | 进阶工具:三个"Workflow 加速器"

03 | 进阶工具:三个"Workflow 加速器"

作者把 `git stash`、`git log`、`git diff` 归为"非必需但提效"。

`stash` 的典型场景:代码写到一半,产品经理喊你修线上 bug。`git stash push -m "half-done refactor"` 比临时提交更干净,因为 stash 不会污染分支历史。

打开网易新闻 查看精彩图片

`log` 和 `diff` 的用法很多人没挖透。`git log --oneline --graph --all` 能画出分支演进图,`git diff HEAD~3..HEAD --stat` 只看文件级改动。这些不是炫技,是 Code Review 时的救命稻草

04 | 新手最常踩的三个坑

04 | 新手最常踩的三个坑

作者复盘了自己的踩坑史,浓缩成三点:

第一,在错误的分支上提交。 解决方案:`git status` 养成肌肉记忆,或者在 shell 提示符里显示当前分支。

第二,提交消息写成"修复 bug"或"更新代码"。 解决方案:用动词开头、说明原因而非动作,例如「将订单超时从 30s 改为 60s,缓解支付网关延迟」。

第三,害怕合并冲突。 解决方案:理解冲突是 Git 的保护机制,它在说"我无法自动判断你要哪个版本",而不是"你搞砸了"。

如果重来一次,作者的建议极简:先掌握核心 Workflow,再按需扩展工具箱

05 | 一个反共识的判断

05 | 一个反共识的判断

Git 的复杂度被高估了。

它的设计哲学来自 Linux 内核开发——分布式、离线优先、完全控制权。但 90% 的开发者工作在集中式流程里:一个远程仓库、feature 分支开发、PR 合并。

这种错配导致大量知识浪费。你不需要理解 `git reflog` 的底层实现,就像司机不需要懂变速箱齿轮比。但你需要知道"我的改动现在在哪",这是所有操作的元问题

原文作者用一句话收尾:「Git feels complex when you try to learn everything. It becomes simple when you think in terms of: 'Where are my changes right now?'」

这个视角转换,比背 100 条命令更值得。