Git 合并冲突解决完整流程
时间:2026-11-14 07:19 作者:emer 分类: 无
Git 合并冲突解决完整流程
一、冲突是怎么产生的
多人协作开发时,两个分支修改了同一个文件的同一行,Git 无法自动判断保留谁的改动,就会报合并冲突。常见出现在 git merge、git rebase、git pull 以及 PR 合并环节。冲突不是报错,而是 Git 把决定权交给你,需要手动选择保留内容后再提交。
二、触发冲突的典型场景
git checkout feature/login
git merge main
# 输出 CONFLICT (content): Merge conflict in src/Login.php
此时工作区文件被 Git 写入冲突标记,仓库处于未完成合并状态。
三、看懂冲突标记
打开冲突文件,Git 会用三组标记分隔:
<<<<<<< HEAD
$user = auth()->login($name, $pwd);
=======
$user = UserModel::check($name, $pwd);
>>>>>>> main
<<<<<<< HEAD到=======之间是当前分支(你所在分支)的内容;=======到>>>>>>> main之间是被合并分支的内容;
手动判断保留哪一段,或融合两者,然后删掉所有冲突标记。
四、标准解决步骤
- 用
git status查看哪些文件冲突,红色 both modified 就是待解决文件; - 编辑器打开文件,搜索
<<<<<<<定位冲突段; - 与改动方沟通,保留正确代码,删除标记行;
git add 文件名标记该文件已解决;- 全部解决后
git commit(merge 会自动生成合并提交信息); - 用
git log --graph确认合并结果。
git status
git add src/Login.php
git commit
五、常用辅助命令
查看冲突差异:
git diff --diff-filter=U
放弃本次合并、回到合并前:
git merge --abort
rebase 过程中解决冲突:
git add 文件名
git rebase --continue
不想继续 rebase 用 git rebase --abort。
六、图形化工具
命令行看不直观时可用内置工具:
git mergetool
会调用配置好的 diff/merge 工具(如 VS Code、KDiff3),三栏对比自动合并。VS Code 直接在文件里点「Accept Current」「Accept Incoming」「Accept Both」按钮。
七、避免冲突的好习惯
- 频繁从主分支拉最新代码,不要长时间脱离主干;
- 大文件拆分、接口契约先行,减少同一行同时改动;
- 配置代码格式化工具统一风格,避免无关格式差异;
- 提交前先 pull --rebase,把冲突在本地解决;
- 冲突一定和对方确认,不要盲目删掉别人的代码。
八、常见误区
- 只删冲突标记却没合并逻辑,导致代码残缺;
- 解决完忘记 git add,合并一直卡住;
- 盲目
git checkout --theirs或--ours覆盖,丢失他人改动; - rebase 冲突解决后忘记 --continue,流程中断。
九、总结
Git 冲突本质是同一位置的并行修改,解决流程就是:定位冲突标记、人工取舍融合、add 标记、提交或继续 rebase。配合 status、diff、merge --abort 等命令和图形化工具,再养成频繁同步主干的习惯,协作中的合并冲突就能高效处理,不会卡住发布流程。