6. Git 基础 1:提交、分支、合并与冲突解决
交付的第一条流水线:从版本控制开始。
本章目标
把 Git 从“能提交”升级为“能协作”:理解提交图谱、分支合并、冲突本质与解决套路。
你会掌握
commit/branch/merge/rebase 的心智模型、PR 协作流程、以及冲突的三方合并思路。
真实收益
CI/CD 的起点是一次可靠的变更。你能把“乱”变成“可追溯”,把“冲突”变成“可控的合并”。
在团队协作里,Git 像“时间机器 + 法庭记录”。
时间机器让你能回到任何版本;法庭记录让你能回答:谁改了什么、为什么改、出了问题该回到哪里。
这一章我们用一个更现实的目标推进:让你敢合并、敢发布、敢回滚,而不是把 Git 当成“提交按钮”。
时间机器让你能回到任何版本;法庭记录让你能回答:谁改了什么、为什么改、出了问题该回到哪里。
这一章我们用一个更现实的目标推进:让你敢合并、敢发布、敢回滚,而不是把 Git 当成“提交按钮”。
1) Git 的核心心智模型:它记录的不是文件,而是快照与关系
很多人学 Git 学得痛苦,是因为一直在背命令,却没有建立模型。你只要记住三件事:
- Commit 是快照:每次提交记录的是整个仓库在那一刻的状态(以及指向父提交的指针)。
- Branch 是指针:分支名本质上只是“指向某个提交”的可移动指针。
- Merge 是合并历史:合并不是“复制文件”,而是把两条历史线收敛到一个新的提交节点。
图 1:提交图谱(commit graph)与分支指针(动态)
理解这个图,你就不会再把 Git 当成黑魔法:分支只是指针,合并就是在图上“汇合”。
2) 日常工作流:从“工作区”到“可合并的变更”
把 Git 的日常动作理解为一条流水线,会更稳:
- 工作区(Working Tree):你正在编辑的文件。
- 暂存区(Index):你准备提交的变更“清单”。
- 提交(Commit):一个可追溯的变更点(快照 + 元信息)。
最常用的一组命令(建议熟到形成肌肉记忆):
git status:现在是什么状态?git diff:我改了什么?git add -p:把“想提交的部分”挑出来(非常重要)git commit:把变更变成可追溯的节点git log --oneline --graph:把历史图谱看清楚
一个专业习惯:提交不是“保存”,提交是“讲故事”。
每个 commit 都应该回答:我为什么改?改完系统变成什么样?失败时该回到哪里?
每个 commit 都应该回答:我为什么改?改完系统变成什么样?失败时该回到哪里?
3) 合并与冲突:冲突不是事故,是信息
冲突的本质是:同一段内容在两条历史线上都发生了改变,Git 无法自动判断你要哪一个。
解决冲突的关键是三方合并(three-way merge):Git 会拿到:
- Base:两条分支的共同祖先(原始版本)
- Ours:当前分支的版本
- Theirs:要合并进来的版本
图 2:三方合并与冲突产生的位置(动态)
用 Base 把“冲突”从情绪问题变成事实问题:我们到底从什么变成了什么?
冲突解决的“稳定套路”(不慌)
- 先看冲突范围:
git status找到冲突文件。 - 理解语义:别急着删标记,先搞清 Base/Ours/Theirs 各自想表达什么。
- 做出明确选择:合并逻辑,而不是拼接文本。
- 跑测试/最小验证:至少保证能编译/能跑。
- 提交解决结果:让“冲突解决”成为可追溯事件。
专业建议:解决冲突时,优先用 IDE 的三方视图(Base/Ours/Theirs)。
你要解决的是语义冲突,而不是字符冲突。
你要解决的是语义冲突,而不是字符冲突。
4) Merge vs Rebase:不是宗教战争,是权衡
两者本质区别:
- Merge:保留真实历史,产生一个合并点(merge commit)。
- Rebase:把你的提交“搬到”另一条分支的末尾,让历史更线性。
在团队里更重要的是一致性:选一种策略,并配套规范(何时用、谁能用、怎么审计)。
5) PR 协作:把变更变成“可审计的证据链”
一个健康的 PR 流程,会把“个人改动”变成“团队可接受的变更”。它通常包含:
- 清晰标题与描述:为什么改?影响范围?回滚方式?
- 可复现的测试信息:怎么验证?
- 自动化门禁:lint/test/安全扫描/required checks
- 评审与批准:用最少的沟通获得最大的信息增益
图 3:一次 PR 的证据链(动态)
PR 不是“请求合并”,而是“提交证据”:变更、审查、自动化验证、以及可追溯的结论。
本章小结:把 Git 变成协作引擎
- Git 的核心不是命令,而是提交图谱 + 指针的模型。
- 冲突不是事故,是信息:用三方合并把它变成语义决策。
- PR 不是形式主义,而是团队的证据链:评审 + 自动化门禁 + 可追溯结论。