“樱桃选择合并”的最简单方法

Posted

技术标签:

【中文标题】“樱桃选择合并”的最简单方法【英文标题】:Easiest way to "cherry-pick a merge" 【发布时间】:2016-05-04 08:32:11 【问题描述】:

我知道标题有点啰嗦 - 因此是引号!

假设我有一个分支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】:

我认为 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

【讨论】:

以上是关于“樱桃选择合并”的最简单方法的主要内容,如果未能解决你的问题,请参考以下文章

复制 activerecord 记录的最简单方法是啥?

从 C++ 调用 Java 方法的最简单方法是啥?

将数组转换为向量的最简单方法是啥?

将数组转换为向量的最简单方法是啥?

在 Visual C++ 中执行查询的最简单方法是啥

选择屏幕区域的最简单方法