我有两个分支。提交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 rev-list --reverse b..f | xargs -n 1 git cherry-pick

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

或者使用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

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

另一个值得一提的变体是,如果你想要一个分支的最后n次提交,~语法可以很有用:

git cherry-pick some-branch~4..some-branch

在这种情况下,上面的命令将从一个名为some-branch的分支中选择最后4次提交(尽管您也可以使用提交散列来代替分支名称)