Git合并分支git merge的3种模式,git rebase,git cherry-pick的不同用法

本文目录如下:

1
2
3
4
5
6
         - git merge       
                     默认,fast-forward模式
                     --no-ff
                     --squash
         - git rebase
         - git cherry-pick

---------------------------------------------正文开始------------------------------------------------------------

  • git merge 参数分支test(以下又叫子分支)
    一句话记忆:要合并到谁,就要先切换到谁
    理解:在当前分支新建节点,把当前分支和参数分支不同的部分合并到新节点
    下面就git merge命令的几个不同选项来对比,前提:当前分支为master

    1
    2
    3
    4
    5
      1. git merge 参数分支test

        使用fast-forward模式
        当前分支master移动到参数分支test所在的地方,并移动HEAD指针
        删除参数分支test后,会丢掉参数分支test信息

在这里插入图片描述

1
2
3
4
5
        2. git merge --no-ff -m "commit描述"  参数分支test

        禁用fast forward模式
        master分支会生成新提交点,合并主子分支的冲突文件
        会有子分支合并进来的引用

在这里插入图片描述

1
2
3
4
        3. git merge --squash   参数分支test

        master生成新的提交点,合并主子分支的冲突文件
        不会有子分支合并进来的引用

在这里插入图片描述

  • git rebase 参数分支master

    1
    2
    3
    4
     一句话记忆:要rebase谁,就切换到谁
     理解:将当前分支(test)    超前的节点   在参数分支(master)的基础上重新提交
       
     rebase会将合入分支上超前的节点在待合入分支上重新提交一遍,如下图,B1 B2会变为B1’ B2’,看起来会变成线性历史

在这里插入图片描述

  • git cherry-pick 节点commit_id

    1
    2
    3
    4
     前提:当前分支是test
     理解:复制节点commit_id所作的修改,在当前分支上也做同样的修改
     
     想把哪个节点merge过来就把哪个节点merge过来,其合入的不是分支而是提交节点

参考:链接