在GitHub上将develop分支合并到master分支的标准操作方法是什么?
正确合并develop到master的流程与问题解决
问题根源
你遇到的旧提交和无意义冲突,本质是master和develop的提交历史出现了分叉——要么是master有直接提交(比如紧急修复后直接推master,没同步到develop),要么是develop分支的合并操作导致提交历史混乱,使得GitHub判定两边有大量不重叠的提交。
本地预处理(彻底避免PR冗余提交)
先在本地同步两个分支的历史,再推远程开PR,这是最稳妥的方式:
- 拉取最新的master分支:
git checkout master && git pull origin master - 把develop分支基于最新master做rebase,让develop的提交都排在master之后,历史变线性:
git checkout develop && git rebase master- 如果遇到冲突,直接修改冲突文件,然后执行:
重复直到rebase完成git add . && git rebase --continue
- 如果遇到冲突,直接修改冲突文件,然后执行:
- 推送rebase后的develop到远程(因为rebase改了历史,需要强制推送,用
--force-with-lease避免覆盖他人提交):git push origin develop --force-with-lease - 再去GitHub开PR,此时PR里只会显示develop相对于master的新提交,不会出现已存在的旧内容。
如果不想修改develop的历史,也可以用merge方式同步master到develop:
- 拉取最新master后,切换到develop合并master:
git checkout develop && git merge master - 解决冲突后提交合并,推送到远程develop,再开PR即可。
GitHub PR合并的最优选项
合并PR时,别用默认的「Create a merge commit」,选以下两种方式之一:
- Squash and merge:把develop上的多个提交压缩成一个干净的提交合并到master,适合小版本迭代,master历史更简洁
- Rebase and merge:把develop的提交线性排列到master最新提交之后,保持完整的提交历史且无分叉
无意义冲突的规避(比如版本号)
像版本号这种频繁修改的文件,最好:
- 不要手动修改,用自动化脚本在合并时自动递增版本号
- 每次合并feature到develop前,先同步最新的develop分支,确保版本号是基于最新状态修改的
- 把版本号文件的修改逻辑统一(比如只在特定分支或特定时机修改),避免两边独立修改导致冲突
内容的提问来源于stack exchange,提问作者jss367
相关产品推荐
相关产品推荐

