如何实现Git非修改源分支的类Rebase合并(类似GitHub PR选项)
实现不修改source分支的Rebase式合并到当前target分支
你想要的效果是将source分支中未在target分支存在的提交批量应用到当前target分支,同时不改动source分支,这可以通过以下两种简洁的方式实现:
方法一:使用git cherry-pick批量应用提交
直接在当前target分支执行以下命令,它会自动把source分支相对于target的所有新提交依次应用到当前分支:
git cherry-pick $(git merge-base target source)..source
- 如果遇到冲突,解决冲突后执行
git cherry-pick --continue即可继续后续提交的应用,流程和git rebase一致。 - 若想放弃操作,执行
git cherry-pick --abort。
方法二:临时分支配合git rebase(更贴合Rebase体验)
这种方式完全模拟GitHub的Rebase合并逻辑,且不会修改source分支:
# 当前处于target分支 git checkout -b temp source # 基于source创建临时分支 git rebase target # 将临时分支重定基到target上,重演所有新提交 git checkout target # 切回target分支 git merge --ff-only temp # 快进合并临时分支,将重定基后的提交同步到target git branch -D temp # 删除临时分支
关于git rebase --onto的补充
你之前尝试的git rebase --onto命令之所以不符合需求,是因为该命令默认会修改指定的目标分支(比如source)。若要通过它实现需求,本质还是需要借助临时分支,和方法二的逻辑一致,并没有更简洁的写法。因此上面两种方法是更直接的选择。
内容的提问来源于stack exchange,提问作者Flamefire
相关产品推荐
相关产品推荐

