合并冲突解决指南:看懂标记、四步收尾

冲突不是错误,而是 Git 把决定权交给你。看懂那几行标记,按四步走一遍就能收尾;不确定就 --abort 重来,成本为零。

最后更新:2026-10-29

Git 命令速查表 → 撤销三件套 → Git 急救手册 →

三句话理解冲突

下面先看冲突标记长什么样,再按四步收尾。

冲突标记长什么样

打开冲突文件,Git 会插入三段标记,把两边内容分开:

<<<<<<< HEAD
当前分支(ours)的内容
=======
要合进来的分支(theirs)的内容
>>>>>>> feature/login

注意:标记必须全部删除,否则会被当成普通文本提交上去。

为什么会冲突

冲突数量和改动大小无关,只看两边的改动是否落在一起。

四步解决法

  1. git status 看清哪些文件处于 both modified
  2. 打开文件,定位 <<<<<<< / ======= / >>>>>>>
  3. 编辑成最终内容,删掉所有标记行
  4. git add <文件> 标记已解决,再 git commit(merge)或 git rebase --continue(rebase)
git status                       # 1. 看冲突文件(both modified)
# 2-3. 编辑文件,删除 <<<<<<< ======= >>>>>>>
git add src/app.js               # 4. 标记已解决
git commit                       # merge 收尾
# 或
git rebase --continue            # rebase 收尾

常用命令速查

命令作用
git status查看冲突文件(both modified)
git diff --name-only --diff-filter=U只列出尚未解决的冲突文件
git checkout --ours <文件>整文件采用「当前分支」版本(不是只改冲突块,慎用)
git checkout --theirs <文件>整文件采用「合进来」版本(慎用)
git merge --abort放弃本次 merge,回到合并前
git rebase --abort放弃本次 rebase
git merge --continue解决后继续 merge
git rebase --continue解决后继续 rebase
git mergetool调起图形化合并工具逐个解决

借助工具更快

减少冲突的习惯

常见问题

解决完冲突后怎么继续 merge / rebase?

merge:先 git add 标记已解决,再 git commit(Git 会预填合并信息)。rebase:先 git add,再 git rebase --continue。想放弃就 git merge --abort 或 git rebase --abort,回到操作前的状态。

怎么一次性列出所有冲突文件?

用 git diff --name-only --diff-filter=U(U 表示 unmerged)只列出尚未解决的冲突文件;git status 也能看到 both modified 的文件列表。

冲突解决错了怎么重来?

还在 merge / rebase 中:git merge --abort 或 git rebase --abort 直接回到操作前。已经提交了错误结果:未推送时用 git reset --hard ORIG_HEAD 退回;已推送时用 git revert 生成反向提交,别 force push 改写共享历史。