关于github:如何在Git中将特定提交从一个分支合并到另一个分支?

How do I merge a specific commit from one branch into another in Git?

我有BranchA,比BranchB先出113个。

但我只希望来自BranchA的最后10个承诺合并到BranchB中。

有办法吗?


git cherry-pick 命令允许您接受一次提交(来自任何分支),并且本质上,在您的工作分支中重新平衡它。

pro git书的第5章比我更好地解释了这一点,包括图表等。(关于再平衡的章节也是很好的阅读。)

最后,在另一个问题中,有一些关于樱桃采摘与合并与再平衡的好评论。


你可以选择想要的承诺。

我发现了如何选择多个承诺

我会做被接受的回答。


如果brancha没有被推到远程,那么您可以使用rebase重新排序提交,然后简单地使用merge。如果可能的话,最好使用merge而不是rebase,因为它不会创建重复提交。

1
2
3
4
5
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集成贡献的工作

另一种将引入的工作从一个分支转移到另一个分支的方法是Cherry-Pick。在Git中挑选一个樱桃就像一个提交的钢筋。它获取提交中引入的补丁,并尝试在当前所在的分支上重新应用它。如果一个主题分支上有许多提交,并且您希望只集成其中的一个,或者如果一个主题分支上只有一个提交,并且您更愿意选择它而不是运行rebase,那么这非常有用。例如,假设您有一个这样的项目:

enter image description here

如果要将commit e43a6拉入主分支,可以运行

1
2
3
4
$ 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中引入的相同更改,但您将得到一个新的commit sha-1值,因为应用的日期不同。现在您的历史如下:

氧化镁

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