zoukankan      html  css  js  c++  java
  • git -处理分支合并

    1.分支间的合并

    1)直接合并:把两个分支上的历史轨迹合二为一(就是所以修改都全部合并)

    zhangshuli@zhangshuli-MS-7817:~/myGit$ vim merge.txt
    zhangshuli@zhangshuli-MS-7817:~/myGit$ git st 
    g# On branch thrid
    # Untracked files:
    #   (use "git add <file>..." to include in what will be committed)
    #
    #    merge.txt
    nothing added to commit but untracked files present (use "git add" to track)
    zhangshuli@zhangshuli-MS-7817:~/myGit$ git add .
    zhangshuli@zhangshuli-MS-7817:~/myGit$ git commit -m "merge"
    [thrid 6436f0b] merge
     1 files changed, 1 insertions(+), 0 deletions(-)
     create mode 100644 merge.txt
    zhangshuli@zhangshuli-MS-7817:~/myGit$ git log -1
    commit 6436f0b6bbe0da18ce65e90dd7ea90cf4008bbe3
    Author: zhangshuli <zhangshuli@vanzotec.cn>
    Date:   Sat Feb 28 12:37:47 2015 +0000
    
        merge
    zhangshuli@zhangshuli-MS-7817:~/myGit$ git checkout parent 
    Switched to branch 'parent'
    zhangshuli@zhangshuli-MS-7817:~/myGit$ git merge thrid 
    Merge made by recursive.
     merge.txt         |    1 +
     mysite-1.0.tar.gz |  Bin 0 -> 501 bytes
     mysite-1.0.zip    |  Bin 0 -> 501 bytes
     3 files changed, 1 insertions(+), 0 deletions(-)
     create mode 100644 merge.txt
     create mode 100644 mysite-1.0.tar.gz
     create mode 100644 mysite-1.0.zip
    zhangshuli@zhangshuli-MS-7817:~/myGit$ git br -av
    * parent 44d288e Merge branch 'thrid' into parent
      son    3a1cbb4 ccc add
      thrid  6436f0b merge
    zhangshuli@zhangshuli-MS-7817:~/myGit$ ls
    aaa.txt  bbb.txt  ccc.txt  ddd.txt  merge.txt  mysite-1.0.tar.gz  mysite-1.0.zip
    zhangshuli@zhangshuli-MS-7817:~/myGit$ git log -1
    commit 44d288e4316e47ac9b6e3ee6a4152aceff5d17ce
    Merge: e2e09c4 6436f0b
    Author: zhangshuli <zhangshuli@vanzotec.cn>
    Date:   Sat Feb 28 12:38:07 2015 +0000
    
        Merge branch 'thrid' into parent
    zhangshuli@zhangshuli-MS-7817:~/myGit$ 

    2)压合合并:一分支若干提交合并为一个,然后合并到另外的分支上(squash)

    zhangshuli@zhangshuli-MS-7817:~/myGit$ git branch
      parent
      son
    * third
    zhangshuli@zhangshuli-MS-7817:~/myGit$ ls
    aaa.txt  bbb.txt
    zhangshuli@zhangshuli-MS-7817:~/myGit$ vim ccc.txt
    zhangshuli@zhangshuli-MS-7817:~/myGit$ vim ddd.txt
    zhangshuli@zhangshuli-MS-7817:~/myGit$ git st 
    # On branch third
    # Untracked files:
    #   (use "git add <file>..." to include in what will be committed)
    #
    #    ccc.txt
    #    ddd.txt
    nothing added to commit but untracked files present (use "git add" to track)
    zhangshuli@zhangshuli-MS-7817:~/myGit$ git add ccc.txt
    zhangshuli@zhangshuli-MS-7817:~/myGit$ git commit -m "commit ccc.txt"
    [third 6a74382] commit ccc.txt
     1 files changed, 1 insertions(+), 0 deletions(-)
     create mode 100644 ccc.txt
    zhangshuli@zhangshuli-MS-7817:~/myGit$ git log -1
    commit 6a74382c9c481515cd70136ce3212ace7aa1c50e
    Author: zhangshuli <zhangshuli@vanzotec.cn>
    Date:   Sat Feb 28 14:08:24 2015 +0000
    
        commit ccc.txt
    zhangshuli@zhangshuli-MS-7817:~/myGit$ git st 
    # On branch third
    # Untracked files:
    #   (use "git add <file>..." to include in what will be committed)
    #
    #    ddd.txt
    nothing added to commit but untracked files present (use "git add" to track)
    zhangshuli@zhangshuli-MS-7817:~/myGit$ git add .
    zhangshuli@zhangshuli-MS-7817:~/myGit$ git commit -m "commit ddd"
    [third 618011f] commit ddd
     1 files changed, 1 insertions(+), 0 deletions(-)
     create mode 100644 ddd.txt
    zhangshuli@zhangshuli-MS-7817:~/myGit$ git log -1
    commit 618011fc23e6fe8108e830e2812a298ad217d0cb
    Author: zhangshuli <zhangshuli@vanzotec.cn>
    Date:   Sat Feb 28 14:08:45 2015 +0000
    
        commit ddd
    zhangshuli@zhangshuli-MS-7817:~/myGit$ git checkout parent 
    Switched to branch 'parent'
    zhangshuli@zhangshuli-MS-7817:~/myGit$ git merge --squash third 
    Updating 2a30fca..618011f
    Fast-forward
    Squash commit -- not updating HEAD
     ccc.txt |    1 +
     ddd.txt |    1 +
     2 files changed, 2 insertions(+), 0 deletions(-)
     create mode 100644 ccc.txt
     create mode 100644 ddd.txt
    zhangshuli@zhangshuli-MS-7817:~/myGit$ git st 
    # On branch parent
    # Changes to be committed:
    #   (use "git reset HEAD <file>..." to unstage)
    #
    #    new file:   ccc.txt
    #    new file:   ddd.txt
    #
    zhangshuli@zhangshuli-MS-7817:~/myGit$ git commit -m "yahe"
    [parent 02906a1] yahe
     2 files changed, 2 insertions(+), 0 deletions(-)
     create mode 100644 ccc.txt
     create mode 100644 ddd.txt
    zhangshuli@zhangshuli-MS-7817:~/myGit$ git log -1
    commit 02906a15dc15be5fefd5e41dcd3977bb2f762cff
    Author: zhangshuli <zhangshuli@vanzotec.cn>
    Date:   Sat Feb 28 14:10:45 2015 +0000
    
        yahe
    zhangshuli@zhangshuli-MS-7817:~/myGit$ 

    从上面我们可以看出来,所谓的压合分支,其实也是把另一个分支的状态全部移到另一个分支上,只是它并不是merge,而是把提交转化为变更存储到目标分支缓存,让你统一处理

    3)捡选合并(cherry-picking):把某个提交进行合并

    zhangshuli@zhangshuli-MS-7817:~/myGit$ git log -1
    commit 068698c5c848ded943f3454691f420136a2930ee
    Author: zhangshuli <zhangshuli@vanzotec.cn>
    Date:   Sat Feb 28 14:20:25 2015 +0000
    
        cherry-pick
    zhangshuli@zhangshuli-MS-7817:~/myGit$ git checkout parent 
    Switched to branch 'parent'
    zhangshuli@zhangshuli-MS-7817:~/myGit$ git cherry-pick 068698c5c848ded943f3454691f420136a2930ee
    Finished one cherry-pick.
    [parent 1c33f51] cherry-pick
     1 files changed, 1 insertions(+), 0 deletions(-)
    zhangshuli@zhangshuli-MS-7817:~/myGit$ ls
    aaa.txt  bbb.txt  ccc.txt  ddd.txt
    zhangshuli@zhangshuli-MS-7817:~/myGit$ git log -1
    commit 1c33f513af17f21dd157522b98a2027047d599c3
    Author: zhangshuli <zhangshuli@vanzotec.cn>
    Date:   Sat Feb 28 14:20:25 2015 +0000
    
        cherry-pick
    zhangshuli@zhangshuli-MS-7817:~/myGit$ ls
    aaa.txt  bbb.txt  ccc.txt  ddd.txt
    zhangshuli@zhangshuli-MS-7817:~/myGit$ vim aaa.txt 
    zhangshuli@zhangshuli-MS-7817:~/myGit$

    它使用的命令是cherry-pick 而且参数已经不是branch 而是节点号了

    如果你想cherry-pick某个提交,但是又不立刻把这个提交在本分支上提交,你可以使用参数-n 它的作用就和压合合并效果类似

    zhangshuli@zhangshuli-MS-7817:~/myGit$ git cherry-pick -n 068698c5c848ded943f3454691f420136a2930ee
    Finished one cherry-pick.
    zhangshuli@zhangshuli-MS-7817:~/myGit$ git st 
    # On branch parent
    # Changes to be committed:
    #   (use "git reset HEAD <file>..." to unstage)
    #
    #    modified:   aaa.txt
    #
    zhangshuli@zhangshuli-MS-7817:~/myGit$ git commit

    2.合并分支冲突的处理

    这时候只要执行命令git mergetool就行了,它会自动打开一个merge工具

  • 相关阅读:
    MySQL创建数据库简单命令
    工作的本质是解决问题
    使用消息中间件时,如何保证消息仅仅被消费一次?
    缓存穿透了怎么办?
    MySQL 数据库的提速器-写缓存(Change Buffer)
    删库了,我们一定要跑路吗?
    做好一件事的三要素
    一分钟简单了解 JSON Web Token
    聊一聊 MySQL 中的数据编辑过程中涉及的两阶段提交
    聊一聊 MySQL 数据库中的那些锁
  • 原文地址:https://www.cnblogs.com/zhangshuli-1989/p/vz_150228143.html
Copyright © 2011-2022 走看看