如何在Git中将特定的提交从一个分支合并到另一个分支?
我有BranchA
,它在BranchB
之前提交。
但是我只想把BranchA
的最后10个提交合并到BranchB
。
有没有办法做到这一点?
git cherry-pick <commit>
命令允许你从一个分支中执行一个单独的commit操作,实质上就是在你的工作分支中重新绑定它。
Pro Git书的第5章比我能更好地解释它 ,完成了图表等。 寻找“重新激活和樱桃采摘工作stream程”部分。 ( 关于Rebasing的一章也是很好的阅读。)
最后, 在另一个SO问题上,樱桃selectvs合并vs rebasing有一些好的评论 。
你可以select所需的提交。
我发现这个如何挑选多个提交
我会做接受的答案。
如果BranchA没有被推送到远程,那么你可以使用rebase
重新sorting提交,然后简单地merge
。 在可能的情况下最好使用merge
不是rebase
,因为它不会创build重复的提交。
git checkout BranchA git rebase -i HEAD~113 ... reorder the commits so the 10 you want are first ... git checkout BranchB git merge [the 10th commit]
来源: https : //git-scm.com/book/en/v2/Distributed-Git-Maintaining-a-Project#Integrating-Contributed-Work
另一种把推介工作从一个分支转移到另一个分支的方法是挑选它。 Git中的樱桃select就像一个单一的承诺的rebase。 它需要在提交中引入的修补程序,并尝试将其重新应用到当前所在的分支上。 如果您在主题分支上有多个提交,并且您只想集成其中的一个,或者您只在主题分支上有一个提交,并且您更愿意挑选它而不是运行重新分配,那么这非常有用。 例如,假设你有一个如下所示的项目:
如果你想提交e43a6到你的主分支,你可以运行
$ git cherry-pick e43a6 Finished one cherry-pick. [master]: created a0a41a9: "More friendly message when locking the index fails." 3 files changed, 17 insertions(+), 3 deletions(-)
这将引入e43a6中引入的相同更改,但是会得到一个新的提交SHA-1值,因为应用的date不同。 现在你的历史看起来像这样:
现在,您可以删除您的主题分支,并删除您不想提交的提交。