1.分支间的合并

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

zhangshuli@zhangshuli-MS-:~/myGit$ vim merge.txt
zhangshuli@zhangshuli-MS-:~/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-:~/myGit$ git add .
zhangshuli@zhangshuli-MS-:~/myGit$ git commit -m "merge"
[thrid 6436f0b] merge
files changed, insertions(+), deletions(-)
create mode merge.txt
zhangshuli@zhangshuli-MS-:~/myGit$ git log -
commit 6436f0b6bbe0da18ce65e90dd7ea90cf4008bbe3
Author: zhangshuli <zhangshuli@vanzotec.cn>
Date: Sat Feb :: + merge
zhangshuli@zhangshuli-MS-:~/myGit$ git checkout parent
Switched to branch 'parent'
zhangshuli@zhangshuli-MS-:~/myGit$ git merge thrid
Merge made by recursive.
merge.txt | +
mysite-1.0.tar.gz | Bin -> bytes
mysite-1.0.zip | Bin -> bytes
files changed, insertions(+), deletions(-)
create mode merge.txt
create mode mysite-1.0.tar.gz
create mode mysite-1.0.zip
zhangshuli@zhangshuli-MS-:~/myGit$ git br -av
* parent 44d288e Merge branch 'thrid' into parent
son 3a1cbb4 ccc add
thrid 6436f0b merge
zhangshuli@zhangshuli-MS-:~/myGit$ ls
aaa.txt bbb.txt ccc.txt ddd.txt merge.txt mysite-1.0.tar.gz mysite-1.0.zip
zhangshuli@zhangshuli-MS-:~/myGit$ git log -
commit 44d288e4316e47ac9b6e3ee6a4152aceff5d17ce
Merge: e2e09c4 6436f0b
Author: zhangshuli <zhangshuli@vanzotec.cn>
Date: Sat Feb :: + Merge branch 'thrid' into parent
zhangshuli@zhangshuli-MS-:~/myGit$

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

zhangshuli@zhangshuli-MS-:~/myGit$ git branch
parent
son
* third
zhangshuli@zhangshuli-MS-:~/myGit$ ls
aaa.txt bbb.txt
zhangshuli@zhangshuli-MS-:~/myGit$ vim ccc.txt
zhangshuli@zhangshuli-MS-:~/myGit$ vim ddd.txt
zhangshuli@zhangshuli-MS-:~/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-:~/myGit$ git add ccc.txt
zhangshuli@zhangshuli-MS-:~/myGit$ git commit -m "commit ccc.txt"
[third 6a74382] commit ccc.txt
files changed, insertions(+), deletions(-)
create mode ccc.txt
zhangshuli@zhangshuli-MS-:~/myGit$ git log -
commit 6a74382c9c481515cd70136ce3212ace7aa1c50e
Author: zhangshuli <zhangshuli@vanzotec.cn>
Date: Sat Feb :: + commit ccc.txt
zhangshuli@zhangshuli-MS-:~/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-:~/myGit$ git add .
zhangshuli@zhangshuli-MS-:~/myGit$ git commit -m "commit ddd"
[third 618011f] commit ddd
files changed, insertions(+), deletions(-)
create mode ddd.txt
zhangshuli@zhangshuli-MS-:~/myGit$ git log -
commit 618011fc23e6fe8108e830e2812a298ad217d0cb
Author: zhangshuli <zhangshuli@vanzotec.cn>
Date: Sat Feb :: + commit ddd
zhangshuli@zhangshuli-MS-:~/myGit$ git checkout parent
Switched to branch 'parent'
zhangshuli@zhangshuli-MS-:~/myGit$ git merge --squash third
Updating 2a30fca..618011f
Fast-forward
Squash commit -- not updating HEAD
ccc.txt | +
ddd.txt | +
files changed, insertions(+), deletions(-)
create mode ccc.txt
create mode ddd.txt
zhangshuli@zhangshuli-MS-:~/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-:~/myGit$ git commit -m "yahe"
[parent 02906a1] yahe
files changed, insertions(+), deletions(-)
create mode ccc.txt
create mode ddd.txt
zhangshuli@zhangshuli-MS-:~/myGit$ git log -
commit 02906a15dc15be5fefd5e41dcd3977bb2f762cff
Author: zhangshuli <zhangshuli@vanzotec.cn>
Date: Sat Feb :: + yahe
zhangshuli@zhangshuli-MS-:~/myGit$

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

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

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

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

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

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

2.合并分支冲突的处理

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

最新文章

  1. apt28组织新的flash漏洞利用包dealerschoice分析
  2. HttpServletRequest的Attribute和Parameter区别
  3. Linux常用命令01
  4. ubuntu14.04 wifi驱动安装
  5. cursor详解
  6. 【JavaScript】JavaScript中的Timer是怎么工作的( setTimeout,setInterval)
  7. HDU 1863 畅通工程(最小生成树,prim)
  8. OpenStack简单测试性能监控数据记录
  9. C# 程序自动批量生成 google maps 的KML文件
  10. Javascript自动化文档工具JSDuck在Windows下的使用心得
  11. select函数的介绍和使用
  12. HTML5 CSS3 精美案例 : 实现VCD包装盒个性幻灯片
  13. Django目录
  14. Python帮助
  15. kvm 一些web管理3方工具
  16. MooFest POJ - 1990 (树状数组)
  17. Dubbo透传traceId/logid的一种思路
  18. Zookeeper 集群搭建--单机伪分布式集群
  19. 洛谷P1553 数字翻转(升级版)
  20. python 爬虫第三方库

热门文章

  1. FOJ1205 小鼠迷宫问题 (BFD+递推)
  2. postgresql拓展if、ifnull、group_concat函数
  3. django-xadmin使用之更改菜单url
  4. WEB前端,混合排版,有的宽有的窄,滚动会出现空白处,怎么办。
  5. 基于BP神经网络的简单字符识别算法自小结(C语言版)
  6. poj2002 哈希
  7. DDR3内存技术原理
  8. vim 脚本之快捷注释
  9. OSSIM(开源安全信息管理系统)在企业网络管理中的应用
  10. Vuejs2.0构建一个彩票查询WebAPP(2)