美文网首页
git merge 合并时的 --no-ff 的作用

git merge 合并时的 --no-ff 的作用

作者: 苦咖啡Li | 来源:发表于2021-03-26 23:12 被阅读0次

    转载:https://blog.csdn.net/zombres/article/details/82179122

    git merge 合并时的 --no-ff 的作用: 禁止快进式合并

    $ git checkout develop
    $ git merge --no-ff feature
    

    1、Git 合并两个分支时,如果顺着一个分支走下去可以到达另一个分支的话,那么 Git 在合并两者时,只会简单地把指针右移,叫做“快进”(fast-forward):

              A---B---C feature
             /
    D---E---F master
    

    2、要把 feature 合并到 master 中,执行以下命令

    $ git checkout master
    $ git merge feature
    
    ==== >  结果就会变成
    
              A---B---C feature
             /         master
    D---E---F 
    

    因为 feature 就在 master 的下游,所以直接移动了 master 的指针,master 和 feature 都指向了 C。而如果执行了 git merge --no-ff feature 的话,是下面的结果:

    $ git merge --no-ff feature
    
    ==== >  结果就会变成
    
              A---B---C feature
             /         \
    D---E---F-----------G master
    
    由于 --no-ff 禁止了快进,所以会生成一个新的提交,master 指向 G。
    

    总结:

    从合并后的代码来看,结果其实是一样的,区别就在于 --no-ff 会让 Git 生成一个新的提交对象。

    通常我们把 master 作为主分支,上面存放的都是比较稳定的代码,提交频率也很低,而 feature 是用来开发特性的,上面会存在许多零碎的提交,快进式合并会把 feature 的提交历史混入到 master 中,搅乱 master 的提交历史。

    如果你根本不在意提交历史,也不爱管master 干不干净,那么 --no-ff 其实没什么用。不过,如果某一次 master 出现了问题,你需要回退到上个版本的时候,比如上例,你就会发现退一个版本到了B,而不是想要的 F,因为 feature的历史合并进了 master 里。

    相关文章

      网友评论

          本文标题:git merge 合并时的 --no-ff 的作用

          本文链接:https://www.haomeiwen.com/subject/yfzlhltx.html