Git 中文手册

git merge 冲突怎么解决?一篇讲透合并冲突的 4 个步骤

2026-09-06 约 3 分钟阅读

两个人改了同一文件同一行、git merge 报 conflict,怎么办?本文用真实例子带你走完「看冲突→选版本→标记解决→提交」的完整流程。

合并冲突是 Git 新手最怕、但完全可掌握的场景。它本质是:同一文件的同一位置被两处不同改动改了,Git 不知道该听谁的,于是交给你决定。

先看冲突长什么样

执行合并后出现提示:

Auto-merging 文件.txt
CONFLICT (content): Merge conflict in 文件.txt
Automatic merge failed; fix conflicts and then commit the result.

打开冲突文件,你会看到 Git 留下的标记:

<<<<<<< HEAD
这是你当前分支的版本
=======
这是被合并进来分支的版本
>>>>>>> feature/新功能

<<<<<<< HEAD======= 之间是你这边的,=======>>>>>>> 是对方分支的。

四步解决冲突

第 1 步:定位冲突文件

git status

会列出所有 both modified(双方都改过)的文件,这些就是冲突源。

第 2 步:逐个打开,选择保留内容

打开每个冲突文件,决定每一处 <<<<<<< 区块该留哪个:

  • 只要自己的 → 删掉对方那段和标记
  • 只要对方的 → 删掉自己那段和标记
  • 两者都要 → 手动把两段按顺序合并,只删标记

第 3 步:标记为已解决

改完保存后,把文件加入暂存区,告诉 Git「这个冲突处理好了」:

git add 文件.txt

第 4 步:完成合并提交

所有冲突文件都 add 后,提交:

git commit

Git 会用默认的合并信息,直接保存即可。合并到此完成。

更快:用 IDE 或三方工具

用 VS Code、WebStorm 等打开冲突文件,界面上会有「Accept Current / Accept Incoming / Accept Both」按钮,可视化选择,比手改标记直观得多。命令行重度用户可配置:

git config --global merge.tool vimdiff
git mergetool

常见疑问

  • 冲突时想放弃合并 → git merge --abort(回到合并前)
  • 冲突会不会丢代码 → 不会,只要不误删,所有内容都在标记里
  • 怎么减少冲突 → 保持分支短小、勤 pull、多人少改同一区域

一句话速记

定位(git status)→ 选择(编辑标记区块)→ 标记(git add)→ 提交(git commit)。

?

常见问题 FAQ

冲突会不会导致我的代码丢失?
不会。冲突时双方改动都在文件里,只是被 <<<<<<< ======= >>>>>>> 标记隔开,git add 和 commit 前不会丢。只要不误删内容或强推即可。
冲突太多、想放弃这次合并怎么办?
用 git merge --abort 即可回到合并前的状态,所有未提交的合并改动都会被清除,安全。
git merge 和 git rebase 解决冲突方式一样吗?
冲突解决的编辑步骤一样,但 merge 会保留一个合并提交、历史有分叉;rebase 会把你的提交重放到目标分支顶端、历史线性,通常冲突处理略有不同(rebase 冲突用 git rebase --continue)。
为什么明明没怎么改还是会冲突?
只要两个人改了同一文件的同一行(或同一处逻辑),即使改动很小也可能冲突。保持分支短小、勤 pull 可减少冲突。