Git cherry-pick vs merge分支

时间:2018-02-13 13:19:55

标签: git merge cherry-pick

我知道樱桃选择是为了应用一些中间提交而发明的,但确实存在以下任何区别:

git cherry-pick last_commit_from_branch

git merge some_branch

据我所知,git不仅会应用这一次提交,还会应用所有先前提交的常见提交吗? 如果是,那么这些行的唯一区别在于,在合并的情况下,新提交将具有来自这些分支的两个父提交。

1 个答案:

答案 0 :(得分:4)

这两个命令在很大程度上都是不同的。

让我们从git cherry-pick开始:

  1. 一个樱桃选择文字采用diff提交的提交
  2. 它明确地将此diff应用于您当前所在的HEAD。这意味着它不会考虑任何父提交来完成平滑和正确的合并。
  3. 樱桃选择不会与您选择的分支建立任何连接。您可以参考提交的提交,但此引用仅在提交消息中。
  4. 现在让我们来看看合并的作用。(为了简单起见,我们看一下常见的3-way合并)

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

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

    1. 首先,它会尝试找到AB的最常见祖先,在这种情况下为2
    2. 现在,它将确定47带来的更改,并再次匹配2以获得合并的差异。更详细:如果您在27中进行了更改,则会在合并发生变化时从A进行更改,反之亦然。
    3. 因此,与简单的樱桃选择相比,合并有可能在进行实际合并时考虑更多信息。