«

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

四、标准解决步骤

  1. 用 git status 查看哪些文件冲突,红色 both modified 就是待解决文件;
  2. 编辑器打开文件,搜索 <<<<<<< 定位冲突段;
  3. 与改动方沟通,保留正确代码,删除标记行;
  4. git add 文件名 标记该文件已解决;
  5. 全部解决后 git commit(merge 会自动生成合并提交信息);
  6. 用 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」按钮。

七、避免冲突的好习惯

  1. 频繁从主分支拉最新代码,不要长时间脱离主干;
  2. 大文件拆分、接口契约先行,减少同一行同时改动;
  3. 配置代码格式化工具统一风格,避免无关格式差异;
  4. 提交前先 pull --rebase,把冲突在本地解决;
  5. 冲突一定和对方确认,不要盲目删掉别人的代码。

八、常见误区

  1. 只删冲突标记却没合并逻辑,导致代码残缺;
  2. 解决完忘记 git add,合并一直卡住;
  3. 盲目 git checkout --theirs 或 --ours 覆盖,丢失他人改动;
  4. rebase 冲突解决后忘记 --continue,流程中断。

九、总结

Git 冲突本质是同一位置的并行修改,解决流程就是:定位冲突标记、人工取舍融合、add 标记、提交或继续 rebase。配合 status、diff、merge --abort 等命令和图形化工具,再养成频繁同步主干的习惯,协作中的合并冲突就能高效处理,不会卡住发布流程。

标签: Git 版本控制 合并冲突 rebase