git merge和git rebase的区别

本文来说下git merge和git rebase的区别

文章目录

  • 分支合并
  • 解决冲突
  • git rebase和git merge的区别
  • 本文小结


分支合并

git merge是用来合并两个分支的。比如:将 b 分支合并到当前分支。同样git rebase b,也是把 b 分支合并到当前分支。他们的 「原理」如下:

假设你现在基于远程分支"origin",创建一个叫"mywork"的分支。

$ git checkout -b mywork origin

假设远程分支"origin"已经有了 2 个提交,如图。

现在我们在这个分支做一些修改,然后生成两个提交(commit)。

$ vi file.txt
$ git commit
$ vi otherfile.txt
$ git commit
...

但是与此同时,有些人也在"origin"分支上做了一些修改并且做了提交了。

这就意味着"origin"和"mywork"这两个分支各自"前进"了,它们之间"分叉"了。

在这里,你可以用"pull"命令把"origin"分支上的修改拉下来并且和你的修改合并;结果看起来就像一个新的"合并的提交"(merge commit):

但是,如果你想让"mywork"分支历史看起来像没有经过任何合并一样,你也许可以用git rebase:

$ git checkout mywork$ git rebase origin

这些命令会把你的"mywork"分支里的每个提交(commit)取消掉,并且把它们临时 保存为补丁(patch)(这些补丁放到".git/rebase"目录中),然后把"mywork"分支更新 为最新的"origin"分支,最后把保存的这些补丁应用到"mywork"分支上。

当mywork分支更新之后,它会指向这些新创建的提交(commit),而那些老的提交会被丢弃。如果运行垃圾收集命令(pruning garbage collection), 这些被丢弃的提交就会删除。(请查看 git gc)


解决冲突

在 rebase 的过程中,也许会出现冲突(conflict)。在这种情况,Git 会停止 rebase 并会让你去解决 冲突;在解决完冲突后,用git-add命令去更新这些内容的索引(index),然后,你无需执行git-commit,只要执行:

$  git rebase --continue

这样 git 会继续应用(apply)余下的补丁。

在任何时候,你可以用–abort参数来终止 rebase 的行动,并且"mywork" 分支会回到 rebase 开始前的状态。

$  git rebase --abort

git rebase和git merge的区别

现在我们可以看一下用合并( merge )和用 rebase 所产生的历史的区别:

在这里插入图片描述

当我们使用Git log来参看 commit 时,其 commit 的顺序也有所不同。

假设 C3 提交于9:00AM,C5 提交于 10:00AM,C4 提交于 11:00AM,C6 提交于 12:00AM。

对于使用 git merge 来合并所看到的 commit 的顺序(从新到旧)是:C7、C6、C4、C5、C3、C2、C1。

对于使用 git rebase 来合并所看到的 commit 的顺序(从新到旧)是:C7、C6‘、C5’、C4、C3、C2、C1。

因为C6’提交只是 C6 提交的克隆,C5’ 提交只是 C5 提交的克隆。

从用户的角度看使用 git rebase 来合并后所看到的commit的顺序(从新到旧)是:C7、C6、C5、C4、C3、C2、C1。


本文小结

本文记录了一下git merge和git rebase的区别

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/3175.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

信号链噪声分析15

文章目录 概要整体架构流程技术名词解释技术细节小结 概要 提示:这里可以添加技术概要 模数转换器(ADC)将模拟量——现实世界中绝大部分现象的特征——转换为数字语言, 以便用于信息处理、计算、数据传输和控制系统。数模转换器(DAC)则用于将发送或存 储…

Java单例模式

Java单例模式 1、概念2、代码实现方案饿汉式实现:懒汉式实现:饿汉式PK懒汉式: 3、单例模式的特点及适用场景优点:缺点:适用场景: 4、关于单例模式的常见问题4.1 public static SingletonOne getlnstance(){}A.该方法为什么用静态的…

lesson6 ZIgbee网络特性抓包分析

目录 ZIgbee网络特性抓包分析 理论部分: 实验部分: 入网前相关数据帧(仅单个设备供电): 首先以路由器和协调器为例:(帧的类别从头部的Type可以看到,在四大帧类别中根据不同作用也…

Java POI (2)—— Excel文件的上传与导出(实例演示)

一、单文件的上传功能 这里是一个demo的流程图,下面按照这个流程图做了一个简单的实现,有部分判断没有加上,实际操作中,可以根据自己的需求进行增加或者修改。并且此处还是在接受文件传入后将文件进行了下载,保存到本地…

分类预测 | MATLAB实现GA-LSTM遗传算法优化长短期记忆网络的数据多输入分类预测

分类预测 | MATLAB实现GA-LSTM遗传算法优化长短期记忆网络的数据多输入分类预测 目录 分类预测 | MATLAB实现GA-LSTM遗传算法优化长短期记忆网络的数据多输入分类预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 MATLAB实现GA-LSTM遗传算法优化长短期记忆网络的数据多…

douyin23.9 deviceid和iid设备注册分析

使用23.9版本进行注册(版本多少 其实没有那么重要) 老生常谈,老规矩注册接口device_register不能少吧,然后要检测设备app_alert_check吧,之后要发app_log日志包吧。 当然除了只有这些接口肯定是不行啦,加密…

蓝牙资讯|未来几年物联网迅猛发展,蓝牙发挥重要作用

IDC预测,2023年全球物联网(IoT)支出将达到8057亿美元,比2022年增长10.6%。物联网生态系统的投资预计将在2026年超过1万亿美元,在2023-2027年的预测期内,复合年增长率(CAGR)为10.4%。 到2023年,物联网服务将成为最大的…

【Java EE】-博客系统二(前后端分离)

作者:学Java的冬瓜 博客主页:☀冬瓜的主页🌙 专栏:【JavaEE】 分享: 徘徊着的 在路上的 你要走吗 易碎的 骄傲着 那也曾是我的模样 ——《平凡之路》 主要内容:显示用户信息、上传头像、新增博客、删除博客、修改博客…

Java HelloWorld

一、java命令 目录 一、java命令 二、Java HelloWorld 1.单个java文件 2.单个包多java文件 3.多个包 三、jar包 1.生成jar包 2.引用jar包 三、IntelliJ IDEAMaven HelloWorld 四、IntelliJ IDEAMavenspringboot HelloWorld javac:将.java文件编译成.clas…

设计模式篇(Java):适配器模式

设计模式篇(Java):建造者模式 八、适配器模式 8.1 适配器模式基本介绍 生活中的适配器例子 比如生活中的插座,在不同国家插座有着不同的规格,如果我们从一个国家去另外一个国家需要使用插座时就需要一个中间转换器把两种不同规则的插座适配一…

Spring Security系列之基础概念

文章目录 基本原理Authentication接口UserDetailsService 接口PasswordEncoder 接口EnableWebSecurity 注解 基本原理 SpringSecurity 本质是一个过滤器链,采用的是责任链设计模式。 启动的时候,控制台打印出来的 DefaultSecurityFilterChain 过滤器&…

openfeign实现远程调用

一 openfeign简介 Feign 是声明性(注解)web 服务客户端它使编写 web 服务客户端更加容易请创建一个接口并对其进行注解.它具有可插入注解支持,包括Feign注解和JAXRS注解Feign 还支持可插拔编码器和解码器。Spring cloud 添加了对Spring MVC注解的支持,并…