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工具

原文地址:https://www.cnblogs.com/zhangshuli-1989/p/vz_150228143.html