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

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


当前回答

如果你有选择性的修订要合并,比如从A,B,C,D,E,F,G,H,I,J提交A, C, F, J,简单地使用下面的命令:

git cherry-pick A C F J

其他回答

选择多次提交:

签出到您想要选择提交的分支

使用以下命令:(通过部分哈希)

git cherry-pick 1e038f10 1e038f11 1e038f12 ...

或者请求的一行代码:

git rebase --onto a b f

除了提交之外,还可以通过管道从stdin输入sha列表。

git rev-list --reverse ..main -- path/ | git cherry-pick --stdin 

Rev-list基本上是git-log的管道命令(“丑陋”但快速的表亲) 注意——反向是需要的。

您可以通过这种方式执行更高级的操作,而不仅仅是提交范围。

最简单的方法是使用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

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

git checkout a
git cherry-pick b..f

or

git checkout a
git cherry-pick c^..f