合并分支与冲突处理
30 分钟
合并分支与冲突处理
功能在分支上开发完成后,要合并(merge)回 main,让主线包含你的改动。若两人改了同一处,Git 会标记冲突,需要人工决定保留什么。
学习目标
- 用
git merge把功能分支并入主线 - 读懂冲突标记并手动解决
- 知道 merge commit 与 fast-forward 的区别
快进合并(Fast-forward)
当 main 在分支创建后没有新 commit 时:
git switch main
git merge feature/readme
Git 只需把 main 指针移到 feature 最新 commit,历史是一条直线,常不单独产生 merge commit。
三方合并
若 merge 时 main 上也有新 commit,Git 会生成一个 merge commit,父节点有两个(main 与 feature 各自最新)。
git switch main
# 假设 main 上已有别的 commit
git merge feature/readme
用图查看:
git log --oneline --graph --all
冲突是怎么来的
两个分支修改了同一文件的同一区域,Git 无法自动选边,会暂停 merge 并标记文件:
<<<<<<< HEAD
main 上的内容
=======
feature 上的内容
>>>>>>> feature/readme
解决步骤
- 打开冲突文件,删掉
<<<<<<</=======/>>>>>>>标记 - 保留正确内容(或合并两边)
git add 该文件git commit完成 merge(或使用默认 merge message)
放弃本次 merge:
git merge --abort
推荐工作流(小团队)
# 1. 更新主线
git switch main
git pull
# 2. 从最新 main 拉功能分支
git switch -c feature/my-work
# 3. 开发、多次 commit
# ...
# 4. 合并前再拉一次 main,减少冲突
git switch main
git pull
git merge feature/my-work
# 或 PR 在 GitHub 上合并
# 5. 删除已合并分支
git branch -d feature/my-work
与 CodeRoadMap 协作
多人改 admin / platform 时,冲突常见于:
- 同一路由配置文件
- 同一组件样式
package-lock.json/pnpm-lock.yaml
减少冲突:按模块分工、小步提交、合并前先 pull main。
练习
- 制造简单冲突:两分支各改 README 同一行,merge 并手动解决
- 用
git log --graph对比 fast-forward 与 merge commit - 试一次