如何在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不同。 现在你的历史看起来像这样:

在这里输入图像说明

现在,您可以删除您的主题分支,并删除您不想提交的提交。