如何挑选多个提交
我有两个分支。 提交a是一个头,而另一个有b , c , d , e和f在上面。 我想将c , d , e和f到第一个分支而没有提交b 。 使用樱桃捡起很容易:首先结账第一个分支樱桃逐一挑选c到第二分支到第一个分支。 但是有什么办法可以在一个命令中挑选所有的c – f ? 
以下是该场景的视觉描述(感谢JJD ):

Git 1.7.2引入了挑选一系列提交的能力。 从发行说明 :
git cherry-pick“学会select一系列的提交(例如”cherry-pick A..B“和”cherry pick -stdin“),”git revert“也是如此,这些都不支持更好的顺序控制” rebase [-i]“,虽然。
包括重要的评论(学分给各自的作者)
注意1:在“樱桃selectA..B”forms,A应该比B更老。如果他们是错误的命令命令将默默地失败。 – 达米安
注2:此外,这不会挑选A,而是A之后的所有东西,包括B。 – JB Rainsberger
注3:包括一个只是typesgit樱桃采摘A ^ .. B – sschaef
 最简单的方法就是使用转换选项。 假设当前在a处结束的分支叫做mybranch,这就是你想把c – f移动到的分支。 
 # checkout mybranch git checkout mybranch # reset it to f (currently includes a) git reset --hard f # rebase every commit after b and transplant it onto a git rebase --onto ab 
或者请求一行:
 git rebase --onto abf 
 您可以使用git rebase和git branch的串行组合将一组提交应用到另一个分支上。 正如wolfc发布的那样 ,第一条命令实际上复制了提交。 但是,只有将分支名称添加到组的最顶层提交时,才能看到更改。 
请在新标签中打开图片

以文本forms总结这些命令:
-  打开gitk作为一个独立的进程使用命令: gitk --all &。
-  运行git rebase --onto abf。
- 在gitk中按F5 。 没有什么变化。 但是没有标记。
-  运行git branch selection
- 在gitk中按F5 。 其提交的新分支出现。
这应该澄清的事情:
-  提交a是该组的新根目的地。
-  提交b是组的第一次提交之前的提交(独占)。
-  提交f是组的最后一次提交(包含)。
 之后,你可以使用git checkout feature && git reset --hard b从feature分支中删除提交c到f 。 
除了这个答案之外,我还写了一篇博客文章 ,在另一个场景中描述这些命令,这将有助于普遍使用它。
 git rev-list --reverse b..f | xargs -n 1 git cherry-pick 
要应用JB Rainsberger和sschaef的评论来专门回答这个问题……在这个例子中使用樱桃挑选范围:
 git checkout a git cherry-pick b..f 
要么
 git checkout a git cherry-pick c^..f 
 git format-patch --full-index --binary --stdout range... | git am -3