我知道标题有点模糊 - 因此加了引号!
假设我有一个分支b_feature
,这个分支是从主开发分支b_master
创建的,并已经合并回去。现在存在另一个分支b_release
,我希望将这些更改添加到该分支中(作为一个点发布)。b_master
和b_release
已经分叉,不会再次合并。
---------Bm----k1-----Mm-----> b_master (k1 isn't to be included in b_release)
\ \ /
\ c1--c2--c3 (b_feature)
\
\----Br---------Mr-----> b_release
\ /
cA-cB-cC
我知道我可以使用git cherry-pick -m Mm
将整个内容作为单个diff进行挑选,得到:
----Br--Squashed----> b_release
其中Squashed
是一个包含所有功能更改的提交,合并消息为Mm
。
但如果我想保留更改历史记录和单独的提交消息怎么办? 我可以使用以下大致工作流手动挑选:
git checkout b_release
git checkout -b b_release_feature
git cherry-pick c1^..c3
git checkout b_release
git merge b_release_feature
git commit --amend --reedit-message=Mm
git branch -d b_release_feature
但这似乎是一个笨拙的解决办法,而我不知道更优雅的解决方案!
rebase --onto b_release Bm Mm
也似乎不能产生我想要的结果。
有更好的方法吗?