如何挑选包含合并的分支

How to cherry-pick a branch that contains merges

我们在分支 master 的功能分支中开发新功能。有时,此类功能应向后移植到以前版本的软件,我们希望最好能完整保留历史记录。

我知道我可以使用 git cherry-pick A..B 来选择提交范围。但是,长期存在的功能分支可能包含合并以使其与主分支保持同步。遇到合并提交时,cherry-pick 中止。

是否有一些(最好是规范的)方法可以做到这一点?像

git cherry-pick --ignore-merges master...feature

作为参考,分支设置看起来有点像这样。我想从我的功能分支中挑选提交 H、K 和 K 到 version_old.

A - B - C - D - E - L [master]
|       \       \
|        H - J - M - K [feature]
\
 F - G [version_old]
git log --pretty=%H --reverse --no-merges A..B | git cherry-pick --stdin

我尝试了几个 cherry-pick 选项,我认为这就是您要找的选项

git cherry-pick ^J H..K

它将挑选 H 和 K 之间的所有提交,不包括 J。 阅读 this