【问题标题】:Git cherry-pick vs merge branchesGit 樱桃挑选与合并分支
【发布时间】:2018-07-23 21:08:21
【问题描述】:

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

git cherry-pick last_commit_from_branch

git merge some_branch

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

【问题讨论】:

    标签: git merge cherry-pick


    【解决方案1】:

    这两个命令在本质上是不同的。

    让我们从git cherry-pick开始:

    1. 樱桃选择字面意思是采用 diff 引入的提交
    2. 它实际上将此diff 应用于您当前所在的HEAD。这意味着它不需要考虑任何父提交来完成平滑和正确的合并。
    3. 樱桃采摘不会与您从中采摘的分支建立任何连接。有对您从中获取的提交的引用,但此引用仅在提交消息中。

    现在让我们看看合并的作用。(为简单起见,我们看一下常见的 3-Way 合并)

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

    现在假设你想合并它们。 git 现在会做什么?

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

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

    【讨论】:

    • “Acherry pick 字面意思是提交引入的差异” -- 你确定吗?提交不是差异,cherry pick 只是将它们复制到新的父级......
    • 其实我很确定。例如,这就是变基正在做的事情。它会删除每个提交并重新应用这些差异。
    • 但是提交不是差异...? --- 也许我只是在迂腐。
    • 我同意你的观点,提交绝对不是差异。但是 git 将计算差异并应用此差异。
    • 真正的区别是分支是否在进行了更多更改后再次合并。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-07
    • 1970-01-01
    • 1970-01-01
    • 2013-05-02
    • 2017-02-26
    • 2014-11-21
    • 1970-01-01
    相关资源
    最近更新 更多