如何仅将PR内的差异改动合并到其他不同分支?
解决方案
完全可以仅提取两个分支的差异合并到目标分支,以下是两种比手动复制更规范高效的实现方式:
方案1:git cherry-pick(保留原有提交记录)
适合需要保留你原有开发的每一条commit记录的场景,操作步骤如下:
- 首先拉取目标分支最新代码并创建新的开发分支:
git checkout release/app2/sprint1 git pull origin release/app2/sprint1 git checkout -b feature/app2/sprint1/task1-port
- 找到你在
feature/app1/sprint1/task1分支上所有个人开发提交的commit哈希,排除掉合并release/app1/sprint1产生的merge commit:- 如果你的提交是连续的,比如最早的个人提交哈希是
a1b2c3d,最新的个人提交哈希是x8y9z0,执行批量cherry-pick:
git cherry-pick a1b2c3d^..x8y9z0- 如果你的提交是零散的,逐个执行
git cherry-pick 【commit哈希】即可
- 如果你的提交是连续的,比如最早的个人提交哈希是
- 执行过程中如果出现代码冲突,解决冲突后执行
git cherry-pick --continue即可,直到所有提交移植完成。
方案2:git diff 打补丁(合并为单条提交)
适合不需要保留原有提交记录,只想把所有差异一次性合并的场景,操作步骤如下:
- 同上先基于最新的
release/app2/sprint1创建新的开发分支并切换到该分支 - 直接提取两个分支的差异并应用到当前工作区:
git diff release/app1/sprint1 feature/app1/sprint1/task1 | git apply -
- 执行完成后检查工作区的改动是否符合预期,解决可能存在的代码冲突后,直接执行
git add、git commit提交即可。
两种方案都可以避免手动复制带来的文件遗漏、权限属性丢失、换行符异常等问题,稳定性和效率远高于手动操作。
内容的提问来源于stack exchange,提问作者chink
相关产品推荐
相关产品推荐

