Git合并失败遇冲突:新手用git merge --no-ff合并分支求助
你的合并操作本身没有错误,冲突源于分支间的文件变更差异
Hey there! 先给你吃个定心丸:你用的git merge feat_branch --no-ff命令本身是没问题的。--no-ff参数只是强制Git创建一个新的合并提交(而不是快进合并),这不是导致冲突的原因。
为什么会出现这些冲突?
你看到的CONFLICT (modify/delete)冲突,本质是两个分支对同一批文件做了完全相反的操作:
- 在
feat_branch分支里,你删除了src/controller/app.js和src/controller/service.js这两个文件 - 但在当前的
HEAD分支(也就是你执行合并时所在的分支)里,你修改了这两个文件
Git没法自动判断应该保留哪一方的变更,所以就抛出了冲突,并且默认把HEAD版本的文件留在了工作区,等你手动决策。
怎么解决这些冲突?
你需要明确自己想要保留哪一方的操作,然后按以下步骤处理:
步骤1:查看冲突状态
先执行这个命令确认所有冲突文件:
git status
你会看到那两个文件被标记为冲突状态。
步骤2:选择并处理冲突
根据你的需求二选一:
- 如果想保留当前分支(HEAD)修改后的文件:直接把这些文件加入暂存区,告诉Git你决定保留它们:
git add src/controller/app.js src/controller/service.js - 如果想采纳feat_branch的删除操作:手动删除这些文件,然后把删除操作加入暂存:
rm src/controller/app.js src/controller/service.js git rm src/controller/app.js src/controller/service.js
步骤3:完成合并
处理完所有冲突后,执行提交完成合并:
git commit
Git会自动打开编辑器生成合并提交信息,你可以直接保存退出,或者修改信息后提交。
(可选)如果想放弃合并
如果中途改变主意,想回到合并前的状态,执行:
git merge --abort
小提示
这种modify/delete冲突在多分支协作中很常见,核心就是明确你想要保留哪一方的变更,然后清晰地告诉Git你的选择就好啦。
内容的提问来源于stack exchange,提问作者celsomtrindade
相关产品推荐
相关产品推荐

