能否移除PR中未合并分支的提交历史且保留代码变更?
保留代码变更并移除无关提交历史的方法
当然可以做到,以下是两种实操方案:
方案一:交互式 Rebase 合并提交历史
这个方法直接修改现有分支的提交历史,把 Branch A 的所有提交合并到 Branch B 的提交中:
- 切换到目标分支 Branch B:
git checkout branchB - 启动交互式 rebase,以 updated_main 为基准:
git rebase -i updated_main - 在弹出的编辑器里,你会看到从 updated_main 之后的所有提交(先是 Branch A 的提交,再是 Branch B 的提交):
- 把 Branch A 所有提交行开头的
pick改成fixup(不需要保留 Branch A 的提交说明时用这个),或者squash(需要编辑合并后的提交信息时用这个) - 保存并退出编辑器,Git 会自动把 Branch A 的变更合并到后续提交中
- 把 Branch A 所有提交行开头的
- 如果过程中出现冲突,解决冲突后执行
git rebase --continue即可
方案二:新建分支重构提交历史
如果你不想直接修改现有分支的历史,可以用这个更稳妥的方法:
- 基于 updated_main 新建临时分支:
git checkout -b temp_branch updated_main - 把 Branch A 的代码变更合并到临时分支,但不保留提交历史:
git merge --squash branchA - 提交合并后的变更(可以写个简洁说明,比如"整合 Branch A 的代码变更"):
git commit -m "整合 Branch A 的代码变更" - 把 Branch B 的原提交逐个复制到临时分支:
git cherry-pick branchA..branchB - 切换回 Branch B,用临时分支覆盖当前分支:
git checkout branchB && git reset --hard temp_branch - 删除临时分支:
git branch -D temp_branch
完成后,Branch B 的提交历史就只会显示你需要评审的 Branch B 相关提交,同时完整保留了 Branch A 的代码变更。
内容的提问来源于stack exchange,提问作者elihpoivulp
相关产品推荐
相关产品推荐

