第 5 章 · 合并分支与冲突处理
本章目标:用工作台 合并分支 把 feature 合进 main;读懂冲突标记并在编辑器里手工解决;理解「先切到 main 再合并」;完成一次可复现的单人冲突演练。
学时建议:3.5~4 小时(含 2 小时跟练)
前置:git-collab ch04(已有 feature 分支经验);ch03 会暂存提交。
5.1 场景说明:功能做完了,怎么并回 main
你在 feature/product-filter 上 SRX 改完、自测通过、也 commit 了。接下来要:
- 把 feature 的提交合并到 main
- 推送到 GitHub(ch08)
- 开 PR 给同事 Review(ch09)
合并若两人改过同一行,Git 不会替你做决定——会出现 冲突,本章教你在工作台里安全解决。
5.2 学完你能
| 能力 | 验收 |
|---|---|
| 合并流程 | 切 main → 合并 feature → 提交 |
| 冲突标记 | 认 <<<< ==== >>>> |
| 解决冲突 | 删标记、保留正确内容、暂存、提交 |
| 方向 | 说清「当前分支 = 合入目标」 |
| 习惯 | 合并前 status clean、feature 已提交 |
5.3 合并前检查清单(逐项打勾)
- [ ] feature 上所有改动已 暂存 + 提交(ch03)
- [ ] 终端
git status→ working tree clean - [ ] 本地 main 尽量新(ch08 pull;单人练习可跳过)
- [ ] 知道当前要在 main 上执行合并
为什么 合并在「接收方」分支上执行:你要把 feature 合进 main,人就要站在 main 上拉 feature 进来。
5.4 无冲突合并(先走通 happy path)
步骤 1 — 确认 feature 有独有提交
cd ~/dev-workspace/shop-demo
git checkout main
git log --oneline -3
git checkout feature/ch04-practice # 换成你的 feature 名
git log --oneline -3
步骤 2 — 切到 main
仓库 → GitHub 远程仓库 → 分支 → 切换分支 → main
或终端:git checkout main
步骤 3 — 合并
仓库 → GitHub 远程仓库 → 分支 → 合并分支
选择 源分支:你的 feature/...
(界面文案可能是「要合并的分支」——以实际对话框为准。)
步骤 4 — 若无冲突
可能弹出成功提示,或自动生成 merge commit。
终端:
git log --oneline -5 --graph
你应该看到 main 上多了 feature 的提交,或出现 Merge branch 'feature/...' 一条。
步骤 5 — 验证文件
feature 里改过的 README.md 等,在 main 上应能看到。
5.5 冲突是什么:Git 不知道留哪边
当 main 和 feature 改了同一文件的同一区域,合并会暂停并标记:
<<<<<<< HEAD
main 上这一段的文字
=======
feature 上这一段的文字
>>>>>>> feature/ch05-conflict-demo
| 标记 | 含义 |
|---|---|
<<<<<<< HEAD | 当前分支(合并时你在 main,即 main 侧) |
======= | 分隔线 |
>>>>>>> feature/... | 要合进来 的分支侧 |
你的任务:改成最终想要的一版,并删掉所有标记行。
5.6 跟练:单人制造并解决一次冲突(必做)
步骤 1 — 从 clean main 开始
cd ~/dev-workspace/shop-demo
git checkout main
git status
步骤 2 — 建 feature 并改 README 第一行
git checkout -b feature/ch05-merge-demo
编辑 README.md 第一行为: