写这个 Git 系列,一开始并不是想做一份“命令大全”。
因为 Git 命令真的太多了。
add、commit、branch、merge、rebase、reset、pull、fetch……如果一上来就背命令,新手很容易越学越乱。
但我后来发现,真正让人卡住的,往往不是某个命令本身,而是这些问题:
- 为什么不能直接在
main上开发? - 为什么
.gitignore写了却不生效? - 为什么提交历史很重要?
- 为什么团队要用 Feature 分支?
- 为什么 PR 不是简单提交代码?
- 为什么冲突不可怕,但乱合并很危险?
所以这个系列真正想讲的,不只是 Git 怎么用,而是 Git 背后的开发习惯和协作逻辑。
Git 管理的表面是代码版本。
更深一层,它管理的是变化、历史和团队协作。
我为什么写这个系列
很多人刚开始写代码时,我想大多数都经历过类似场景:
project-final
project-final2
project-final-真的最终版
project-final-别删
我们害怕改错,所以复制一份。
我们不敢重构,因为不知道能不能回去。
我们不知道谁改了什么,也不知道 bug 是什么时候引入的。
Git 出现以后,这些问题有了更好的解决方式。
它让每一次修改都能被记录,每一次提交都能被追踪,每一次协作都有据可查。
但 Git 不应该只是“会敲几个命令”。
真正掌握 Git,意味着你开始理解:
软件开发不是一次写完,而是在不断变化中保持秩序。
这也是我写这个系列的原因。
我希望它能帮助刚入门的程序员,从“我会提交代码”,慢慢走到“我能参与团队协作”。
Git 学习路线图
这个合集其实是一条完整的学习路线。
如果你是新手,可以按这个顺序学。
1. 先完成第一次提交
第一篇是:
5分钟上手 Git:从安装到第一次提交,小白也能学会
这一篇只解决一件事:完成第一次 Git 提交。
你会学到:
git init
git add .
git commit -m "hello git"
这一步看似简单,但很关键。
因为 Git 的核心流程,正是从“修改文件 -> 添加到暂存区 -> 提交到仓库”开始的。
2. 把已有项目交给 Git 管理
第二篇是:
从 0 到 1:给已有代码项目配置 Git 仓库
很多人接触项目有时候并不是从空项目开始,而是已经写了一堆代码,才想接入 Git。
这一篇讲的是:
- 如何在已有项目里
git init - 如何创建
.gitignore - 如何第一次提交
- 如何关联 GitHub / GitLab
- 如何配置 SSH Key
它解决的是从个人项目进入版本管理的第一步。
3. 学会什么不该提交
第三篇是:
别再乱写 .gitignore 了,一篇讲清规则、误区和最佳实践
.gitignore 看起来只是一个小文件,但它决定了仓库是否干净、安全、可维护。
这篇文章重点讲清楚:
- 哪些文件应该忽略
.env为什么不能随便提交- 为什么
.gitignore对已跟踪文件不生效 - 如何用
git rm --cached停止跟踪文件
这一步是在建立仓库边界。
代码要被管理,但不是所有文件都应该进入 Git。
4. 读懂 Git Log,理解代码背后的故事
第四篇是:
Git Log 不只是日志:学会读懂代码背后的故事
很多人只把 git log 当成历史记录。
但它真正有价值的地方在于:
- 谁改了代码
- 什么时候改的
- 为什么改
- 哪次提交引入了问题
- 哪次提交可以回退
代码历史不是摆设。
它是团队理解项目演进的线索。
5. 理解 Git 分支为什么能秒切换
第五篇是:
为什么 Git 分支能“秒切换”?
分支是 Git 最重要的能力之一。
这篇文章讲的是分支背后的本质:
分支不是复制一份完整代码,而是指向某次提交的指针。
理解这一点后,Feature 分支、Merge、Rebase、Conflict 都会变得更容易理解。
6. 用 Feature 分支开发新功能
第六篇是:
实战 Git Feature 分支:团队开发新功能到底怎么做
文章有点长拆成了三篇,对应合集中【Git Feature】三篇文章,这一篇开始进入团队协作。
标准流程是:
git checkout main
git pull origin main
git checkout -b feature/login
一个功能,一个分支。
Feature 分支的意义不是“多开一条线”这么简单,而是隔离风险:
- 半成品不污染主分支
- 多人可以并行开发
- 功能失败可以回退
- 完成后通过 PR 审查再合并
7. Commit 错了,也有后悔药
第七篇是:
救命!我 Commit 错了怎么办?
文章太长我拆成了2篇,合集中发布的【后悔药】系列
开发中一定会遇到:
- 提交信息写错
- 漏提交文件
- 提交了不该提交的东西
- 想撤销最近一次提交
- 想回退到某个历史版本
这篇讲的是 Git 的“后悔药”。
但它真正提醒我们的是:
撤销不是乱删历史,而是理解自己想回到哪个状态。
8. 搞懂 git pull 背后的 fetch 和 merge
第八篇是:
Git pull 到底做了什么
很多人每天都在用:
git pull
但不知道它背后其实做了两件事:
git fetch + git merge
理解这一点后,你会更清楚:
- 为什么 pull 会产生 merge
- 为什么 pull 后会冲突
- 为什么有时推荐
git pull --rebase - 本地分支和远程分支到底是什么关系
9. 学会 Rebase,整理提交历史
第九篇是:
Git Rebase:程序员又爱又怕的神器
Rebase 的核心是:
把当前分支的提交,重新应用到新的基底上。
它能让提交历史更线性,也能在 PR 前整理那些零散 commit。
但它也有风险,因为它会重写历史。
所以最重要的原则是:
本地个人分支大胆用,公共共享分支要谨慎。
10. 遇到代码冲突别慌
第十篇是:
代码冲突别慌:Git Conflict 实战指南
冲突不是 Git 出错。
它只是在告诉你:
同一块代码,两边都改了,我不能替你决定。
解决冲突的关键不是乱点按钮,而是理解业务后决定保留哪一版,或者重新写一版。
真正危险的不是冲突,而是不看懂就合并。
11. 理解 Pull Request 和代码审查
第十一篇是:
Pull Request 到底是什么?
PR 不是提交代码。
它真正表达的是:
我在 feature 分支完成了一段代码,请团队审查后再合并到 main。
一个好的 PR 应该讲清楚:
- 为什么改
- 改了什么
- 怎么验证
- 有什么风险
PR 是代码进入主分支前的一道安全门。
它把个人提交,变成团队确认。
学完 Git 后最大的三个收获
整个系列学习下来,我觉得 Git 最重要的收获不是某条命令,而是三个认知。
代码会变
需求会变,接口会变,设计会变,团队也会变。
今天写下的代码,明天可能就要修改。
今天觉得清楚的逻辑,过几个月可能就没人记得为什么这么写。
所以代码一定要能被追踪。
Git 让每一次变化都有记录,每一次改动都能溯源。
这会让你在面对修改、试错和重构时,更有安全感。
历史不能丢
很多人只关心当前代码能不能跑。
但团队开发里,历史同样重要。
因为你迟早会问:
这个 bug 是什么时候引入的?
这个文件为什么被删了?
这次上线到底改了什么?
能不能回到上一个版本?
如果提交历史混乱,排查问题会非常痛苦。
Git 历史不是形式。
它是项目一路走来的证据。
协作比编码更重要
一个人写代码时,Git 是工具。
多人一起写代码时,Git 是协作系统。
Feature 分支、冲突处理、Rebase、Pull Request,看起来都是 Git 操作,但背后都指向同一件事:
如何让多人安全地修改同一个项目。
成熟团队不是永远不出错。
而是即使有人出错,也不会让整个项目崩掉。
这才是 Git 真正的价值。
下一站:程序员个人品牌建设实战
写完 Git 系列后,我有一个很自然的感受。
当代码能够被管理后,我开始思考另一个问题:
程序员如何管理自己的成长?
代码需要版本管理。
项目需要协作流程。
那程序员自己的经验、表达、作品和影响力呢?
我们写过的文章、做过的项目、踩过的坑、解决过的问题,其实也应该被记录、整理和持续迭代。
于是有了下一季:
《程序员个人品牌建设实战》
如果说 Git 系列讲的是:
如何管理代码和协作。
那么下一季想聊的是:
如何管理经验、输出能力和个人成长。
程序员不只是在公司里写代码的人。
也可以是能沉淀经验、建立信任、被更多人看见的人。
还是借用 【游科CEO】 那句话,踏上取经路,比抵达灵山更重要
下一站,我们从个人品牌开始。
本文由 楸木 原创,转载请注明出处。