如何拉取其他分支变更且不将其纳入当前Pull Request
同步其他分支变更且不污染PR提交记录的操作方法
直接执行merge把目标基线分支(通常是main、develop这类公共主分支)合并到个人开发分支时,会生成合并提交,同时把目标分支的所有历史提交串入你个人分支的提交链,提PR时Git会把所有目标分支上不存在于PR目标分支的提交都列出来,就会出现你遇到的PR夹带大量非本人提交的问题。
标准操作流程(基于rebase,提交历史最干净)
- 先拉取远端仓库最新的目标基线分支代码,不需要切到对应分支,直接执行fetch即可:
git fetch origin <你要同步的目标分支名,比如main> - 切换到你的个人开发分支:
git checkout <你的个人开发分支名> - 执行变基操作,把你个人分支上所有自研的提交,整体平移到最新的目标分支提交节点之后:
git rebase origin/<你要同步的目标分支名,比如main>
变基过程中如果出现代码冲突,正常手动解决冲突后,执行
git add <已解决冲突的文件路径>,再执行git rebase --continue即可,重复这个流程直到rebase完成。如果中途想放弃变基,执行git rebase --abort就能回到变基前的状态。
- 变基完成后推送到远端个人分支即可,因为rebase改写了本地提交历史,推送时需要加强制参数:
git push -f origin <你的个人开发分支名>
注意:强推操作仅能在你自己独占使用的个人开发分支上执行,多人共用的公共分支绝对禁止强推,会覆盖其他人的提交记录。
操作完成后,你的个人分支已经完整同步了目标分支的所有最新代码,同时提交历史里你的自研提交全部排在目标分支最新提交的顶端,提PR时Git只会识别到你自己新增的那部分提交,不会夹带目标分支的原有提交。
误执行merge后的补救方案
如果你已经把目标分支merge到了个人分支,导致PR夹带大量无关提交,可以按以下步骤清理:
- 执行
git log查看提交记录,找到你在个人分支上开始开发、还没执行那次错误merge之前的最新提交哈希值 - 执行软重置,把分支指针挪回这个提交节点,你写的所有代码改动都会保留在工作区,不会丢失:
git reset --soft <刚才找到的提交哈希值> - 把你自己的代码改动重新暂存、提交,此时本地分支就只剩你自己的自研提交了
- 再按照上面的rebase流程同步目标分支的最新代码,强推到远端个人分支后,PR里的多余提交就会被清理干净。
内容的提问来源于stack exchange,提问作者Jordonez
相关产品推荐
相关产品推荐

