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

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


当前回答

git format-patch --full-index --binary --stdout range... | git am -3

其他回答

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

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

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

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

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

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


我需要樱桃选择从一个分支到另一个优先级的提交,但这里的提交很难理解,希望下面的帮助与一个简单的:


步骤如下:

从“dev”分支获取1个带名字的提交(“移除姓氏字段”) 在"hotfix1"分支中提交


1。从“dev”分支获取提交细节

// Go to "dev" branch
git checkout dev

// Get the commit id (1e2e3e4e1 here)
git log --oneline

    > ...
    > ...
    > 1e2e3e4e1     Remove Last Name field
    > ...
    > ...

2。推送提交到“hotfix1”分支

// Go to "hotfix1" branch
git checkout hotfix1

// Get the commit (1e2e3e4e1) from "dev" branch to "hotfix1" branch
git cherry-pick 1e2e3e4e1

// verify changes are correct
gitk

// push to "hotfix1" branch
git push

如果要一次做多个,只需要在上面修改一个,按顺序给出所有的提交id:

git cherry-pick 1e2e3e4e1 1e2e3e4e2 1e2e3e4e3

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

git checkout a
git cherry-pick b..f

or

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

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

git cherry-pick A C F J