6. Git 基础 1:提交、分支、合并与冲突解决

交付的第一条流水线:从版本控制开始。

本章目标

把 Git 从“能提交”升级为“能协作”:理解提交图谱、分支合并、冲突本质与解决套路。

你会掌握

commit/branch/merge/rebase 的心智模型、PR 协作流程、以及冲突的三方合并思路。

真实收益

CI/CD 的起点是一次可靠的变更。你能把“乱”变成“可追溯”,把“冲突”变成“可控的合并”。

在团队协作里,Git 像“时间机器 + 法庭记录”。
时间机器让你能回到任何版本;法庭记录让你能回答:谁改了什么、为什么改、出了问题该回到哪里
这一章我们用一个更现实的目标推进:让你敢合并、敢发布、敢回滚,而不是把 Git 当成“提交按钮”。

1) Git 的核心心智模型:它记录的不是文件,而是快照与关系

很多人学 Git 学得痛苦,是因为一直在背命令,却没有建立模型。你只要记住三件事:

图 1:提交图谱(commit graph)与分支指针(动态)

理解这个图,你就不会再把 Git 当成黑魔法:分支只是指针,合并就是在图上“汇合”。

main feature C1 C2 C3 M F1 F2 F3 main → feature → M 是一次合并提交(merge commit)

2) 日常工作流:从“工作区”到“可合并的变更”

把 Git 的日常动作理解为一条流水线,会更稳:

  1. 工作区(Working Tree):你正在编辑的文件。
  2. 暂存区(Index):你准备提交的变更“清单”。
  3. 提交(Commit):一个可追溯的变更点(快照 + 元信息)。

最常用的一组命令(建议熟到形成肌肉记忆):

一个专业习惯:提交不是“保存”,提交是“讲故事”。
每个 commit 都应该回答:我为什么改?改完系统变成什么样?失败时该回到哪里?

3) 合并与冲突:冲突不是事故,是信息

冲突的本质是:同一段内容在两条历史线上都发生了改变,Git 无法自动判断你要哪一个。

解决冲突的关键是三方合并(three-way merge):Git 会拿到:

图 2:三方合并与冲突产生的位置(动态)

用 Base 把“冲突”从情绪问题变成事实问题:我们到底从什么变成了什么?

Base 共同祖先版本 同一段内容的原始形态 Ours 当前分支版本 你希望保留的改动 Theirs 合并进来的版本 对方希望保留的改动 Resolution 你做出明确选择 保留/合并/重写 确保语义正确 + 通过测试

冲突解决的“稳定套路”(不慌)

  1. 先看冲突范围:git status 找到冲突文件。
  2. 理解语义:别急着删标记,先搞清 Base/Ours/Theirs 各自想表达什么。
  3. 做出明确选择:合并逻辑,而不是拼接文本。
  4. 跑测试/最小验证:至少保证能编译/能跑。
  5. 提交解决结果:让“冲突解决”成为可追溯事件。
专业建议:解决冲突时,优先用 IDE 的三方视图(Base/Ours/Theirs)。
你要解决的是语义冲突,而不是字符冲突。

4) Merge vs Rebase:不是宗教战争,是权衡

两者本质区别:

在团队里更重要的是一致性:选一种策略,并配套规范(何时用、谁能用、怎么审计)。

5) PR 协作:把变更变成“可审计的证据链”

一个健康的 PR 流程,会把“个人改动”变成“团队可接受的变更”。它通常包含:

图 3:一次 PR 的证据链(动态)

PR 不是“请求合并”,而是“提交证据”:变更、审查、自动化验证、以及可追溯的结论。

Change commits + diff 为什么改/改了啥 Review comments + approvals 风险点被提前暴露 Checks CI gate / tests 通过才可合并 要点:PR 让变更“可审计”:能解释、能验证、能追溯。

本章小结:把 Git 变成协作引擎

← 上一章:脚本工程化 下一章:Git 基础 2(分支策略)→