合并冲突
快速摘要
两个分支都改了同一行代码,Git 不知道该保留哪个版本,于是停下来让你手动决定。
为什么发生
两个分支都修改了同一个文件的同一区域
一个分支删除了某文件,另一个分支修改了它
rebase 或 cherry-pick 时与当前提交有冲突
最小示例
✗ 错误代码
<<<<<<< HEAD
const title = "新标题";
=======
const title = "旧标题";
>>>>>>> feature-branch✓ 修复代码
const title = "新标题";HEAD(当前分支)改成“新标题”,feature-branch 还是“旧标题”,Git 无法自动合并。手动保留想要的版本并删除标记即可。
如何诊断
运行
git status查看哪些文件处于冲突状态(both modified)打开冲突文件,搜索
<<<<<<<、=======、>>>>>>>标记理解两个分支各自的修改意图,决定保留哪个或如何合并
如何修复
手动编辑冲突文件,删除标记并保留正确的代码
用
git add <文件>标记冲突已解决用
git merge --continue或git rebase --continue完成操作如果想放弃合并,运行
git merge --abort回到合并前状态
如何预防
团队约定频繁合并主分支到特性分支,减少冲突积累
拆分大改动为小提交,冲突更易定位
约定模块边界,减少多人改同一文件的概率