通常我在master分支上工作,我做了一些提交,然后推送它。
然后我还需要将这些提交推送到其他分支。
通常情况下,我会这样做:
$ git checkout another-branch
$ git cherry-pick commit1
$ git cherry-pick commit2
...
$ git cherry-pick commitn
$ git push
某种愚蠢的,无论如何我可以从主分支的头部合并一些提交所以我不需要 懒得一个接一个地挑樱。
答案 0 :(得分:10)
听起来你可能想在除master之外的分支上进行这些提交,然后将该分支合并到master和第二个分支:
git checkout working-branch
<do some work>
git commit
git checkout master
git merge working-branch
git checkout second-branch
git merge working-branch
这比挑选樱桃要好得多,因为它不涉及重复历史记录中的提交,摆脱任何关于挑选提交两次的问题(你目前必须手动避免)...并且是只是git的设计方式。我不知道你的第二个分支是什么,但我所描述的基本上是定期将维护和主题分支合并回master以及任何其他适当的修改版本或维护分支的常用工作流程。
我强烈建议您采用如上所述通过合并完成此工作的工作流程,但要回答您提出的问题,如果您绝对必须使用主人和樱桃选择,您可能想要自己写一点脚本,如:
#!/bin/bash
# take two arguments:
# 1. other branch to put commits on
# 2. number of commits to cherry-pick from master
if ! git checkout $1; then
exit
fi
git rev-list --reverse -n $2 master |
while read commit; do
if ! git cherry-pick $commit; then
exit
fi
done
显然,有一些方法可以使脚本更加健壮,例如在补丁没有正确应用的樱桃选择之后添加恢复的能力,但这是一个开始。
当然,您可以使用git-rev-list选择提交的方式。您甚至可以将除第一个参数之外的所有参数传递给git-rev-list,以便您可以执行cherries-pick <branch> -n 5 master
或cherries-pick <branch> release_tag..master
或任何您想要的操作。看看它的man page!
你也可以按照其他地方的建议使用git-rebase
,但由于你实际上并不想移动主人,你最终会做这样的事情:
git branch master-copy master
git rebase --onto <branch> master~5 master
git checkout <branch>
git merge master-copy
git branch -d master-copy
答案 1 :(得分:1)
git cherry-pick commit1..commitn
答案 2 :(得分:0)
如果您只想用master更新分支,请执行:
git checkout branch; git merge master
git rebase origin
如果你不想从master中提取所有东西,你可以选择性地区分修订版(boo)或使用分支用于单个功能 - 然后你可以将功能分支合并到master和你的其他分支中。