我有两个分支。提交a是一个的头,而另一个有b, c, d, e和f在a的顶部。我想移动c, d, e和f到第一个分支,而不提交b。使用樱桃采摘很容易:签出第一个分支樱桃采摘一个接一个c到f,并重新建立第二个分支到第一个。但是有没有办法在一个命令中选择所有的c-f ?
下面是场景的可视化描述(感谢JJD):
我有两个分支。提交a是一个的头,而另一个有b, c, d, e和f在a的顶部。我想移动c, d, e和f到第一个分支,而不提交b。使用樱桃采摘很容易:签出第一个分支樱桃采摘一个接一个c到f,并重新建立第二个分支到第一个。但是有没有办法在一个命令中选择所有的c-f ?
下面是场景的可视化描述(感谢JJD):
当前回答
或者使用GitHub桌面应用程序,
您可以在源分支的历史选项卡中选择多个提交,然后右键单击以获得“Cherry-Pick Selected commits”选项。
其他回答
选择多次提交:
签出到您想要选择提交的分支
使用以下命令:(通过部分哈希)
git cherry-pick 1e038f10 1e038f11 1e038f12 ...
这里有一个脚本,允许你在一行中选择多个提交,只需告诉脚本哪个源和目标分支的樱桃选择和提交的数量:
https://gist.github.com/nickboldt/99ac1dc4eb4c9ff003a1effef2eb2d81
从你的分支中选择master(使用当前分支作为源):
./gcpl.sh -m
从6.19中挑选最新的5个提交。X科要掌握:
./gcpl.sh -c 5 -s 6.19.x -t master
运用J. B. Rainsberger和sschaef的评论来具体回答这个问题…在这个例子中使用樱桃选择范围:
git checkout a
git cherry-pick b..f
or
git checkout a
git cherry-pick c^..f
你可以使用git rebase和git分支的串行组合来将一组提交应用到另一个分支上。正如wolfc已经发布的,第一个命令实际上复制了提交。但是,在向组的最顶层提交添加分支名称之前,更改是不可见的。
请在新标签页打开图片…
以文本形式总结命令:
使用命令:gitk——all &将gitk作为一个独立的进程打开。 运行git rebase——to a bf。 在gitk中按F5。没有什么变化。但是没有HEAD标记。 运行git分支选择 在gitk中按F5。新的分支及其提交将出现。
这应该澄清一些事情:
Commit a是组的新根目的地。 提交b是组的第一个提交之前的提交(独占)。 提交f是组(包括)的最后一次提交。
然后,你可以使用git checkout功能&& git reset—hard b从功能分支中删除c到f的提交。
除了这个答案,我还写了一篇博客文章,描述了另一个场景中的命令,应该有助于一般使用它。
或者请求的一行代码:
git rebase --onto a b f