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

Nul*_*uli 151 git github

我有BranchA113个提交BranchB.

但我只希望将最后10个左右的提交BranchA合并到BranchB.

有没有办法做到这一点?

ewa*_*all 225

git cherry-pick <commit>命令允许您进行单个提交(来自任何分支),并且实质上,在您的工作分支中对其进行rebase.

Pro Git书的第5章比我更好地解释了它,完成了图表等; 寻找标题为"重新定位和樱桃采摘工作流程"的部分.(关于重印的章节也很好.)

最后,在另一个SO问题中,对于挑选与合并与变基有一些好评.

  • git cherry-pick -n <commit>如果您不希望樱桃选择自动提交. (7认同)
  • 问题:假设提交 `A` 是从 `master` 分支出来的,你对它做了一些工作,通过 `E` 创建子提交 `B`。假设“E”仅从“D”添加了 1 行。如果你将 `git cherry-pick E` 应用到 `master` 中,它是否将*所有*从 `A` 到 `E` 的更改应用到 `master` 分支中,或者它是否*仅*应用了来自 `D` 的更改到`E`,也就是说,它只向`master`添加了1行?如果是前者,我如何实现后者?(除了手动复制和粘贴) (3认同)
  • 小旁注:你可以在 github 桌面上手动执行此操作(右键单击特定提交到cherry pick)——然后就很直观了:) (2认同)

art*_*dev 9

来源: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(-)
Run Code Online (Sandbox Code Playgroud)

这会引入 e43a6 中引入的相同更改,但您会获得一个新的提交 SHA-1 值,因为应用的日期不同。现在你的历史看起来像这样:

在此处输入图片说明

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


Set*_*eno 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]
Run Code Online (Sandbox Code Playgroud)