在git中,合并有什么区别

我是git的新手,我试图理解一个壁球和rebase之间的区别。 据我了解,你在做rebase时做一个壁球。


这两个git merge --squashgit rebase --interactive可以产生一个“压扁”的提交。
但他们服务于不同的目的。

  • git merge --squash abranch
  • 将在目标分支上产生压扁的提交,而不标记任何合并关系。
    (注意:它不会立即产生提交:您需要额外的git commit -m "squash branch"
    如果你想完全抛弃源代码分支,从(来自SO问题的模式)开始:

     git checkout stable
    
          X                   stable
         /                   
    a---b---c---d---e---f---g tmp
    

    至:

    git merge --squash tmp
    git commit -m "squash tmp"
    
          X-------------------G stable
         /                   
    a---b---c---d---e---f---g tmp
    

    然后删除tmp分支。

  • git rebase --interactive
  • 在新的基础上重放你的一些或全部提交,允许你压缩(或者最近的“修复”,看到这个问题),直接进入:

    git checkout tmp
    git rebase -i stable
    
          stable
          X-------------------G tmp
         /                     
    a---b
    

    如果你选择merge --squash tmp所有提交(但是,与merge --squash相反,你可以选择重播一些, merge --squash其他)。

    所以差异是:

  • merge不会触及你的源代码分支(这里是tmp )并在你想要的地方创建一个单独的提交。
  • rebase允许你继续在同一个源分支 (仍然是tmp ):
  • 一个新的基地
  • 更清洁的历史

  • 合并压缩将一棵树(一系列提交)合并为一次提交。 也就是说,它将在n次提交中进行的所有更改压缩到一次提交中。

    重定基础是重新基础的,也就是为树选择一个新的基础(父提交)。 也许这个术语更清晰:他们称之为移植,因为它只是:为树选择一个新的基础(父提交,根)。

    在进行交互式重新分配时,您可以选择压扁,选择,编辑或跳过您将要分配的提交。

    希望很清楚!


    合并提交:保留分支中的所有提交,并在基本分支上提交它们 在这里输入图像描述

    合并壁球:保留更改但省略历史的单个提交 在这里输入图像描述

    Rebase:这将整个特性分支移动到主分支的顶端,有效地将所有新的提交合并到主分支中

    在这里输入图像描述

    更多关于这里

    链接地址: http://www.djcxy.com/p/49301.html

    上一篇: In git, what is the difference between merge

    下一篇: Remove all git tags expect a custom list of git tags?