Git cherry-pick 与合并分支

Git cherry-pick vs merge branches

我知道 cherry-pick 是为应用一些中间提交而发明的,但确实存在任何区别:

git cherry-pick last_commit_from_branch

git merge some_branch

据我了解,git 不仅会应用这一次提交,还会应用所有以前以普通提交开头的提交? 如果是,这些行的唯一区别是在合并的情况下,新提交将有来自这些分支的两个父提交。

这两个命令有很大的不同。

让我们从 git cherry-pick 开始:

  1. cherry pick literaly 采用 diff 引入的提交
  2. 它确实将此 diff 应用于您当前所在的 HEAD。这意味着它不会考虑任何父提交来完成顺利和正确的合并。
  3. 樱桃采摘不会与您采摘的分支建立任何联系。有对您从中获取的提交的引用,但此引用仅在提交消息中。

现在让我们看看合并的作用。(为了简单起见,我们看一个常见的 3 向合并)

         A
         |
1--2--3--4
   |
   5--6--7
         |
         B

现在假设您要合并它们。 git 现在会做什么?

  1. 首先,它将尝试找到 AB 的最共同祖先,在本例中为 2
  2. 它现在将确定 47 带来的变化,并再次匹配它们 2 以获得合并的差异。更详细:如果您有 27 中的更改,它将在合并更改时采用 A 中的更改,反之亦然。

因此,与简单的 cherry-pick 相比,合并有可能在进行实际合并时考虑更多信息。