如何从PR中移除他人无关提交 仅合并个人提交到master分支
解决方案
两种常用处理方式,按需选择即可。
方法1:cherry-pick 拣选提交(新手首选,容错率高)
操作逻辑是从最新的主分支切出干净的新分支,只把你自己写的提交迁移过去,全程不碰原有错分支,操作错了随时可以重来。
- 先同步本地主分支到最新版本
# 如果你的主分支是main,把下面命令里的master全部替换成main即可 git checkout master git pull origin master - 处理第一个错建的分支:基于最新master创建对应的修复分支
git checkout -b fix/分支1的名称 - 用
git log命令找到你在分支1里自己提交的commit hash(那串40位的哈希字符串,作者信息是你自己,很容易识别),把这个提交拣到新的干净分支上
过程中如果出现代码冲突,正常解决冲突后,执行git cherry-pick <你自己的commit哈希值>git add 冲突文件名,再运行git cherry-pick --continue即可完成操作,没有冲突会自动走完流程。 - 用同样的流程处理第二个错建的分支:切回最新master,新建第二个修复分支,拣选你在分支2里的个人提交
git checkout master git checkout -b fix/分支2的名称 git cherry-pick <你在分支2里的个人commit哈希值> - 确认两个新修复分支的提交历史只有你自己的提交后,把修复后的代码强推到远程,覆盖原来的错分支即可,原有PR会自动同步更新,不需要重新建PR
# 推送第一个修复分支覆盖原远程分支1 git checkout fix/分支1的名称 git push origin fix/分支1的名称:原远程分支1的名称 -f # 推送第二个修复分支覆盖原远程分支2 git checkout fix/分支2的名称 git push origin fix/分支2的名称:原远程分支2的名称 -f
方法2:交互式rebase变基(适合有Git操作经验的用户)
不需要新建分支,直接在原有错分支上清理无关提交:
- 第一步和方法1一致,先拉取最新的master代码到本地。
- 切到第一个错建的分支,执行交互式变基,基点设为最新的master
git checkout 原分支1的名称 git rebase -i master - 命令执行后会弹出文本编辑界面,列出当前分支相对master多出来的所有提交。把所有其他开发者提交所在行开头的
pick改成drop(旧版Git可以简写为d),只保留你自己提交那一行的pick,保存后退出编辑器。 - 同样遇到冲突就正常解决,执行
git add 冲突文件后运行git rebase --continue,直到变基完成。 - 第二个分支重复2-4步操作即可。
- 确认本地分支提交历史清理干净后,强推到远程更新PR:
git push origin 原分支1的名称 -f git push origin 原分支2的名称 -f
注意事项
- 强推远程分支之前,一定要本地执行
git log确认提交历史符合预期,只保留你自己的提交,避免误改代码。 - 如果错建的分支上有其他协作者的提交,强推前务必和对方同步,避免覆盖他人未合并的代码;如果错建分支只有你自己在开发,直接操作即可。
- 后续新建功能分支前,先切到master/main执行pull同步最新代码,再从主分支切新分支,就不会出现混入他人旧提交的问题。

内容的提问来源于stack exchange,提问作者Rostyk
相关产品推荐
相关产品推荐

