如何移除Git分支指定提交以修复PR重复提交问题
PR包含上游分支重复提交的修复方法
该问题的核心是B分支的基准仍为未合并A分支的旧版main,只要将B分支的基准更新为已合入A的最新main即可解决,常用三种处理方案:
方案1:变基到最新main(最常用,提交历史干净)
- 先同步本地main到最新版本
git checkout main && git pull origin main
- 切换回B分支执行变基操作
git checkout B git rebase main
- 变基过程如果出现冲突,逐个解决冲突后执行
git add .,再运行git rebase --continue直到所有提交处理完成 - 变基完成后强制推送本地B分支覆盖远程分支
git push origin B -f
刷新PR页面即可看到仅剩余B分支的独有提交。
方案2:拣选独有提交到新分支(适合怕变基操作出错的场景)
- 先同步本地main到最新版本
git checkout main && git pull origin main
- 从最新main新建干净的新分支
git checkout -b B_new
- 查看B分支的所有提交日志,记录下你在B分支上新增的所有提交哈希值
git log B --oneline
- 按提交时间从早到晚的顺序,将B分支的独有提交拣选到新分支
git cherry-pick <第一个提交哈希> <第二个提交哈希> ...
- 出现冲突时解决冲突后执行
git add .,再运行git cherry-pick --continue直到所有提交处理完成 - 推送新分支到远程后用新分支开PR,也可以直接覆盖原有远程B分支复用旧PR
git push origin B_new:B -f
方案3:合并最新main到B(不修改原有提交历史)
- 先同步本地main到最新版本
git checkout main && git pull origin main
- 切换回B分支执行合并操作
git checkout B git merge main
- 解决冲突后提交合并结果,直接正常推送到远程即可
git push origin B
注意事项
- 若有其他协作者基于原远程B分支做开发,不要随意执行强制推送操作,会导致协作者本地分支与远程分支脱节
- 执行变基/拣选操作前可先给B分支打备份标签,操作失误可快速回滚:
git tag B_backup,回滚命令为git reset --hard B_backup
内容的提问来源于stack exchange,提问作者Stan Loona
相关产品推荐
相关产品推荐

