如何解决Pull Request中无法通过网页编辑器处理的复杂合并冲突
问题原因
你本地执行git status看不到冲突,核心原因是你只单独切换了两个分支,没有在本地执行分支合并操作——Git只有在合并/变基执行过程中才会标记冲突文件,单独切分支时工作区干净是正常状态。
另外你列出的冲突文件里绝大多数是IDE本地配置、C++编译生成的二进制产物,这类文件本身就不应该提交到版本库,完全不需要手动解决内容冲突。
操作步骤
- 先切到stable分支,拉取远端最新代码保证本地版本同步:
git checkout stable git pull origin stable - 在本地stable分支上合并evro分支的内容,触发冲突检测:
命令执行完成后,再跑git merge evrogit status就能看到所有标记为冲突的文件了。 - 批量清理不需要版本管理的冲突文件,这些文件的冲突不需要手动改内容,直接从版本库移除即可:
- JetBrains IDE生成的本地配置目录:执行
git rm -r .idea/整个移除 - VS编译生成的二进制产物,全部执行
git rm删除:git rm OpenGLTemplate/Release/*.obj git rm OpenGLTemplate/Release/*.iobj git rm OpenGLTemplate/Release/*.ipdb git rm -r OpenGLTemplate/Release/TibiaScape.tlog/ git rm OpenGLTemplate/Release/*.pdb git rm Release/*.dll git rm Release/*.pdb
- JetBrains IDE生成的本地配置目录:执行
- 处理唯一需要手动调整的源码文件冲突:打开
OpenGLTemplate/Source/dllmain.cpp,找到文件里被<<<<<<< HEAD、=======、>>>>>>> evro包裹的冲突段:- 分隔线上方
<<<<<<< HEAD到=======之间的内容是stable分支的版本 - 分隔线下方
=======到>>>>>>> evro之间的内容是evro分支的版本
手动保留正确的业务逻辑,删除所有冲突标记符即可。
- 分隔线上方
- 标记冲突已解决,提交合并结果:
git add OpenGLTemplate/Source/dllmain.cpp git commit -m "merge evro to stable, resolve conflicts" - 为了避免后续再出现这类无意义的文件冲突,在仓库根目录新建
.gitignore文件,写入以下忽略规则:
保存后执行# IDE本地配置 .idea/ *.suo *.user # C++编译产物 *.obj *.iobj *.ipdb *.tlog *.pdb *.dll *.exe Release/ OpenGLTemplate/Release/git add .gitignore && git commit -m "add gitignore rules for IDE and build files"提交规则,后续这些本地生成的文件就不会再被Git跟踪、产生冲突。 - 把本地合并完成的stable分支推送到远端:
git push origin stable
推送完成后回到GitHub的Pull Request页面刷新,之前的冲突提示会自动消失,就可以继续推进PR合并流程了。
补充:你之前操作时看到的evro分支upstream丢失提示不影响本次合并,你本地已经保存了evro分支的完整提交记录,本地合并不需要依赖远端evro分支的存在。
内容的提问来源于stack exchange,提问作者kuhi
相关产品推荐
相关产品推荐

