遇到 Git 合并冲突不要慌,最稳妥的做法是先暂停合并流程,确认冲突文件内容后再手动修改,最后提交修复。
先说结论:冲突是 Git 保护代码不被覆盖的机制,手动编辑冲突标记是唯一可靠的解决方式,不要强行覆盖。
- 先确认:使用 git status 查看具体冲突文件列表
- 先处理:打开文件删除冲突标记,保留正确代码
- 再验证:执行 git add 和 git commit 完成合并
命令速用版
# 查看冲突状态
git status
# 放弃本次合并(如果搞砸了)
git merge `--abort`
# 标记冲突已解决
git add <文件名>
# 完成合并提交
git commit
冲突长什么样
Git 会在冲突文件中插入特定标记,示例如下:
<<<<<<< HEAD
console.log('当前分支代码');
=======
console.log('合并分支代码');
>>>>>>> feature-branch
其中 <<<<<<< HEAD 下方是当前分支内容,>>>>>>> 上方是待合并分支内容,======= 是分隔线。
分步处理
第一步:定位冲突文件
执行 git status,输出中会列出 "both modified" 状态的文件,这些就是需要处理的文件。
第二步:编辑文件内容
使用编辑器打开冲突文件,找到冲突标记。根据业务逻辑决定保留哪一部分代码,或者将两部分代码融合。完成后,务必删除所有冲突标记符号。
第三步:标记解决并提交
修改保存后,执行 git add <文件名> 告诉 Git 冲突已解决。所有冲突文件处理完毕后,执行 git commit 完成合并。
怎么验证是否生效
执行 git status,成功解决后的输出应类似:
On branch main
nothing to commit, working tree clean
若显示干净状态,说明冲突已清除。接着可以执行 git log `--oneline` `--graph` 查看提交历史,确认合并提交已生成。
常用合并工具推荐
除了手动编辑,也可以使用图形化工具辅助解决:
- VS Code:内置 Git 支持,冲突处会显示 "Current Change" 和 "Incoming Change",点击 Accept 即可。
- Meld / KDiff3:专业的三方合并工具,可直观对比差异。
- IDEA:右键冲突文件选择 "Resolve Conflicts",提供合并按钮。
常见坑
1. 直接提交冲突标记:千万不要在保留冲突标记的情况下强行 add 和 commit,这会导致代码语法错误。
2. 忽略二进制文件:图片、编译产物等二进制文件冲突无法通过文本编辑解决,通常需要决定保留其中一个版本,使用 git checkout `--ours` 或 git checkout `--theirs` 选择。
3. 误用 abort:git merge `--abort` 会彻底取消本次合并操作,恢复到合并前的状态。如果已经修改了一部分冲突,执行 abort 后这些修改会丢失,需谨慎使用。
参考来源
- Git 官方文档 - Git Merge: https://git-scm.com/docs/git-merge
- Pro Git 中文版 - 分支的合并:https://git-scm.com/book/zh/v2/Git-%E5%88%86%E6%94%AF-%E5%88%86%E6%94%AF%E7%9A%84%E5%90%88%E5%B9%B6