如何在不直接推送的情况下解决Github受保护分支冲突
解决受保护分支feature与master的合并冲突方案
问题根源
你之前的操作是将master合并到基于feature的临时分支,解决冲突后合并回feature,但合并feature到master时仍有冲突,大概率是以下原因:
- 解决冲突时未正确整合feature与master的变更,仅保留了某一方内容,导致两边差异仍存在
- 同步feature与master后,master又产生了新的提交
- 合并PR到feature时使用了 squash/rebase 合并,改写了提交历史,导致差异未被消除
正确操作流程(两种场景)
场景1:直接解决feature合并到master的冲突
如果你的目标是尽快将feature合并到master,无需先同步feature与master,按以下步骤操作:
- 拉取最新的远程分支到本地:
git checkout master git pull origin master git checkout feature git pull origin feature - 创建基于master的临时分支:
git checkout master git checkout -b resolve-feature-to-master-conflicts - 将feature合并到临时分支,触发冲突:
git merge feature - 手动解决所有冲突,完成合并:
# 解决冲突后执行 git add . git commit -m "Resolve conflicts between feature and master" - 推送临时分支到远程,创建针对master的PR,合并该PR即可完成feature到master的无冲突合并。
场景2:先同步feature与master,再合并到master
如果需要保持feature分支与master同步(后续仍需基于feature开发),按以下步骤操作:
- 拉取最新的远程分支:
git checkout master git pull origin master git checkout feature git pull origin feature - 创建基于feature的临时分支:
git checkout -b sync-feature-with-master - 合并master到临时分支,解决冲突:
git merge master # 手动解决所有冲突后 git add . git commit -m "Sync feature with master, resolve conflicts" - 推送临时分支,创建针对feature的PR并合并。此时feature已包含master的所有变更,再合并feature到master时,若master无新提交则会触发快进合并,无冲突;若master有新提交,重复上述同步步骤即可。
关键注意事项
- 解决冲突时必须仔细对比两边代码,确保最终代码整合了feature的业务逻辑与master的最新变更,不能简单保留某一方内容。
- 操作前务必拉取最新的远程分支,避免基于过时代码处理冲突。
- 受保护分支禁止直接推送,所有变更必须通过临时分支的PR完成。
内容的提问来源于stack exchange,提问作者Nyi Nyi Hmue Aung
相关产品推荐
相关产品推荐

