我知道标题有点笨拙-因此引用了!
假设我有一个分支,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
,给
----Br--Squashed----> b_release
whereSquashed
是一个提交,包含功能的所有更改,并带有 merge 的消息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
似乎也没有产生我正在寻找的结果。
有什么更好的方法吗?