我有两个分支。提交a是一个的头,而另一个有b, c, d, e和f在a的顶部。我想移动c, d, e和f到第一个分支,而不提交b。使用樱桃采摘很容易:签出第一个分支樱桃采摘一个接一个c到f,并重新建立第二个分支到第一个。但是有没有办法在一个命令中选择所有的c-f ?

下面是场景的可视化描述(感谢JJD):


当前回答

最简单的方法是使用on选项来调整基数。假设电流在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 a b

其他回答

或者请求的一行代码:

git rebase --onto a b f

或者使用GitHub桌面应用程序,

您可以在源分支的历史选项卡中选择多个提交,然后右键单击以获得“Cherry-Pick Selected commits”选项。

运用J. B. Rainsberger和sschaef的评论来具体回答这个问题…在这个例子中使用樱桃选择范围:

git checkout a
git cherry-pick b..f

or

git checkout a
git cherry-pick c^..f
git rev-list --reverse b..f | xargs -n 1 git cherry-pick

git rev-list打印从分支b到分支f(反向)的所有修订,这样当每一行(提交哈希)按顺序传递时,它会将每一行都樱桃式地选择到当前git HEAD中。例如,git选择{哈希的c};Git选择{哈希的d};... ——@coderatchet评论

这里有一个脚本,允许你在一行中选择多个提交,只需告诉脚本哪个源和目标分支的樱桃选择和提交的数量:

https://gist.github.com/nickboldt/99ac1dc4eb4c9ff003a1effef2eb2d81

从你的分支中选择master(使用当前分支作为源):

./gcpl.sh -m

从6.19中挑选最新的5个提交。X科要掌握:

./gcpl.sh -c 5 -s 6.19.x -t master