原链接:https://www.jianshu.com/p/ff1877c5864e

git merge的三种操作merge, squash merge, 和rebase merge

举例来说:
假设在master分支的B点拉出一个新的分支dev,经过一段时间开发后:

  • master分支上有两个新的提交M1和M2
  • dev分支上有三个提交D1,D2,和D3

如下图所示:

image.png

现在我们完成了dev分支的开发测试工作,需要把dev分支合并回master分支。

  1. merge

这是最基本的merge,就是把提交历史原封不动的拷贝过来,包含完整的提交历史记录。

$ git checkout master
$ git merge dev

image.png

此时还会生产一个merge commit (D4'),这个merge commit不包含任何代码改动,而包含在dev分支上的几个commit列表(D1, D2和D3)。查看git的提交历史(git log)可以看到所有的这些提交历史记录。

  1. squash merge:

根据字面意思,这个操作完成的是压缩的提交;解决的是什么问题呢,由于在dev分支上执行的是开发工作,有一些很小的提交,或者是纠正前面的错误的提交,对于这类提交对整个工程来说不需要单独显示出来一次提交,不然导致项目的提交历史过于复杂;所以基于这种原因,我们可以把dev上的所有提交都合并成一个提交;然后提交到主干。

$ git checkout master
$ git merge --squash dev

image.png

在这个例子中,我们把D1,D2和D3的改动合并成了一个D。

注意,squash merge并不会替你产生提交,它只是把所有的改动合并,然后放在本地文件,需要你再次手动执行git commit操作;此时又要注意了,因为你要你手动commit,也就是说这个commit是你产生的,不是有原来dev分支上的开发人员产生的,提交者本身发生了变化。也可以这么理解,就是你把dev分支上的所有代码改动一次性porting到master分支上而已。

  1. rebase merge

由于squash merge会变更提交者作者信息,这是一个很大的问题,后期问题追溯不好处理(当然也可以由分支dev的所有者来执行squash merge操作,以解决部分问题),rebase merge可以保留提交的作者信息,同时可以合并commit历史,完美的解决了上面的问题。

$ git checkout dev
$ git rebase -i master
$ git checkout master
$ git merge dev

rebase merge分两步完成:
第一步:执行rebase操作,结果是看起来dev分支是从M2拉出来的,而不是从B拉出来的,然后使用-i参数手动调整commit历史,是否合并如何合并。例如下rebase -i命令会弹出文本编辑框:

pick <D1> Message for commit #1
pick <D2> Message for commit #2
pick <D3> Message for commit #3

假设D2是对D1的一个拼写错误修正,因此可以不需要显式的指出来,我们把D2修改为fixup:

pick <D1> Message for commit #1
fixup <D2> Message for commit #2
pick <D3> Message for commit #3

rebase之后的状态变为:

image.png

D1'是D1和D2的合并。

第二步:再执行merge操作,把dev分支合并到master分支:

image.png

注意:在执行rebase的时候可能会出现冲突的问题,此时需要手工解决冲突的问题,然后执行(git add)命令;所有冲突解决完之后,这时不需要执行(git commit)命令,而是运行(git rebase --continue)命令,一直到rebase完成;如果中途想放弃rebase操作,可以运行(git rebase --abort)命令回到rebase之前的状态。

git merge的三种操作merge, squash merge, 和rebase merge相关推荐

  1. 每天一道LeetCode-----使用最少的操作将一个字符串转换成另一个字符串,只有插入,删除,替换三种操作

    Edit Distance 原题链接Edit Distance 题目要求,输入两个字符串word1和word2,计算可以将word1转换成word2的最小的操作次数,可以执行的操作如下,每个操作算作1 ...

  2. 创建Git仓库的三种形式

    创建Git仓库的三种形式: 2种本地创建和远程拉取 文章目录 1. 在idea中初始化仓库 1.1. 进入目录,初始化仓库 1.2. git init 目录名 1.3.1 远程拉取 1. 在idea中 ...

  3. a commit git 参数是什么意思_Git中的git reset的三种参数的区别

    我们平时在使用git的时候,经常会遇到需要撤销上次操作的需求,这时候需要用到git reset的这个命令,他的使用就是 "git-reset – Reset current HEAD to ...

  4. git reset 的三种模式的使用场景

    一.前提 参考:建议先阅读:Git Reset 三种模式 这篇文章只是我的的一个笔记 二.三种模式 git reset --soft git reset --mixed git reset --har ...

  5. GIT忽略文件三种方式教你快速解决

    问题描述 当我们使用git提交代码时会产生一些多余文件,包括.idea.target文件以及一些iml配置文件等,每次提交代码的时候需要手动选择出我们真正要提交的文件,十分不方便,接下来三种方式教你解 ...

  6. OpenCV(总结篇)图像逐像素访问(三种操作:指针、迭代器、at()函数)

    目录 概述 1.指针访问 2.迭代器访问 3.at()函数访问 总代码 效果 参考资料 概述 访问图像像素值是图像处理的基本操作.OpenCV提供了很多访问方式,比较常用的三种方式:  (1) 通过指 ...

  7. shiro 同时实现url和按钮的拦截_一个“保存”按钮同时存在“增删改”三种操作,该如何去实现?...

    一般情况下,对表格中的数据进行"增删改"操作,都是直接操作数据库.现在有些项目因为设计或者优化的缘故,不对表格中的数据进行"增删改",而是通过最后"保 ...

  8. 微信群发消息的三种操作,原来多群群发消息可以这样做

    不管你是做微信营销.还是微商代理,亦或是做社群运营.总避免不了要群发一些消息.不管是群发通知还是群发广告也好,群发功能的出现无疑会给我们的工作带来很大的便捷.那么今天小编就带大家了解一下微信的三种种群 ...

  9. Opencv中三种操作像素的方法

    测试环境:opencv3.1.0 + Visual Studio 2015 + win7 64位 opencv中有3中方法可以访问/修改图像的像素值,分别为: 1.      指针访问 2.      ...

最新文章

  1. python使用matplotlib中的errorbar函数可视化误差条、并自定义数据点标记、数据点大小、数据点颜色、数据点边缘颜色、误差棒颜色、误差棒线条宽度、误差棒边界线长度、误差棒边界线厚度等
  2. Docker 之 Dockerfile 的概述与使用
  3. 大型“数码管”解决方案:用了 28 个舵机的时钟,到底有什么特别?
  4. 我的泰坦尼克数据分析
  5. 双11终于来了,你盖楼了吗?
  6. Java:中的String,StringBuilder,StringBuffer三者的区别
  7. arduino analogread_Arduino编程语言教程,Arduino和单片机的区别
  8. Erlang初学:Erlang的一些特点和个人理解总结
  9. 阿里架构师:​程序员必须掌握的几项核心能力
  10. FFT蝶形算法的verilog实现专题——基-4 频率抽取FFT算法matlab实现
  11. python饼图 立体_【Python基础】惊叹,Pyecharts绘制饼图原来可以如此漂亮!
  12. 吃惊!难道Java也受美国出口管制?
  13. linux达人养成计划i,Linux达人养成计划 I
  14. 奥运会运动项目名称汇总
  15. JavaScript学习笔记(八)——作用域
  16. 2023最新发卡宝系统/自动发卡源码+基于PHP的开发的/UI很美观
  17. css获取时间,改变CSS 样式,获取当前日期
  18. C++ map用法总结和vector用法总结
  19. Kindle电子书的用到的几种文件
  20. CAD特殊符号,你不一定会

热门文章

  1. 链栈的创建,入栈,出栈,获取栈顶元素
  2. 【验证码功能合集】vue简单实现验证码功能,纯前端实现验证码,拿来即用【输入,滑动,拼图】
  3. 有N个台阶,可以走两步也可以走一步 一共有多少种走法
  4. 网站首页banner的高度计算
  5. 用java实现一个汽车租赁系统
  6. RabbitMQ-客户端源码之ChannelManager
  7. Google Play国内应用市场发布版本步骤指导
  8. 免费网络短信Android,5G消息?国产安卓现在就能体验免费RCS增强短信
  9. orgchart组织机构图
  10. 可集成在XPage中的谷歌地图控件