最简单的方式来选择合并"

时间:2016-01-27 11:47:50

标签: git merge git-rebase git-workflow

我知道标题有点毛茸茸 - 所以引用!

假设我有一个分支b_feature,它已分支并合并到主开发分支b_master中。存在另一个分支b_release,我希望将这些更改添加到(作为点发布)。 b_masterb_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

其中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似乎也无法产生我想要的结果。

有更好的方法吗?

1 个答案:

答案 0 :(得分:-1)

我认为rebase是一个比樱桃选择更合适的工具,虽然差别很小。我就是这样做的。首先将b_release_feature分支附加到源分支,然后将其重新绑定到目标分支上。

git checkout -b b_release_feature c3
git rebase --onto b_release c1^ b_release_feature
git checkout b_release
git merge b_release_feature
git commit --amend --reedit-message=Mm
git branch -d b_release_feature