我有BranchA
,这是BranchB
之前的113次提交。
但我只想将BranchA
中的最后10个提交合并到BranchB
。
有办法做到这一点吗?
答案 0 :(得分:217)
git cherry-pick <commit>
命令允许您进行单个提交(来自任何分支),实际上,在您的工作分支中对其进行rebase。
Chapter 5 of the Pro Git book explains it better than I can,附图等。 (The chapter on Rebasing也很好读。)
最后,有一些good comments on the cherry-picking vs merging vs rebasing in another SO question。
答案 1 :(得分:8)
答案 2 :(得分:6)
如果未将BranchA推送到远程,则可以使用rebase
重新排序提交,然后只需merge
。在可能的情况下,最好使用merge
而不是rebase
,因为它不会创建重复的提交。
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]
答案 3 :(得分:2)
消息来源:https://git-scm.com/book/en/v2/Distributed-Git-Maintaining-a-Project#Integrating-Contributed-Work
将介绍工作从一个分支转移到另一个分支的另一种方法是挑选它。 Git中的一个樱桃选择就像是单一提交的基础。它需要在提交中引入的补丁,并尝试在您当前所在的分支上重新应用它。如果您在主题分支上有许多提交并且您只想集成其中一个提交,或者如果您只在主题分支上有一个提交,并且您更愿意选择它而不是运行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值,因为应用的日期不同。现在您的历史记录如下:
现在,您可以删除主题分支并删除您不想提交的提交。