使用squash合并到master时能否长期维护独立的development分支?
解决Git重复squash合并冲突的方案
你遇到的冲突本质是squash合并生成的master提交没有和development分支建立关联,Git无法识别两者的内容同步状态,每次合并都会从最早的共同祖先开始对比,所以会反复触发冲突。以下是完全适配Github网页端+Github Desktop的无命令行解决方案:
操作步骤
- 功能开发完成准备发布时,从
development分支向master发起Pull Request - 在Github PR页面合并时选择Squash and merge选项,合并完成后无需删除
development分支 - 立即新建一个从
master到development的反向Pull Request,系统会自动检测到两个分支无实际文件差异,可直接合并 - 合并反向PR时必须选择Create a merge commit(不要选squash或rebase),完成后
development分支就记录了最新的同步节点
效果说明
最终生成的分支结构完全符合你的预期:
B-------------------G-----------J master / \ / \ / \ a---b---c---d---e---f---g---M1--h---i---M2--j development
其中M1、M2为反向合并生成的空提交,无任何实际文件改动,仅用来标记两个分支的同步节点,不会干扰你留存的完整开发历史,master分支也只会保留干净的 squash 发布提交。
优势对比你当前的方案
- 无需频繁创建带版本号的开发分支,全程仅需维护固定的
master和development两个分支即可 - 所有操作均可以在Github网页端或者Github Desktop完成,不需要使用任何命令行指令
- 不会产生无意义的内容冲突,也不需要封存旧开发分支
注意事项
- 每次squash合并到
master后需要立刻执行反向合并操作,不要在间隔期向development提交新代码,避免出现额外冲突 - 反向PR合并时必须选择生成合并提交,不能用squash或rebase模式,否则会丢失同步节点标记,下次合并仍会触发冲突
内容的提问来源于stack exchange,提问作者Brian H
相关产品推荐
相关产品推荐

