当前位置: 首页 > news >正文

合并分支rebase和merge的区别

文章目录

  • 一、前言
    • 1.1、`master`分支
    • 1.2、`dev`分支
  • 二、合并
    • 2.1、`git merge`
    • 2.2、`git rebase`
  • 三、总结
  • 四、最后

一、前言

实际开发工作的时候,我们都是在自己的分支开发,然后将自己的分合并到主分支,那合并分支用2种操作,这2种操作有什么区别呢?

git上新建一个项目,默认是有master分支的,将项目克隆到本地,我们的准备工作就完成了

img

1.1、master分支

执行git log ,可以看到有一个提交记录,是初始化提交

img

新增一个文件a.txt,再次查看我们的提交记录,有2条提交记录了

img

这个时候将本地新commit的记录push到远程仓库,就可以看到我们的2次提交了

img

1.2、dev分支

同学B在已经有提交记录的master分支上,检出分支dev,并将分支推送到远程分支,并进行自己的开发

img

查看远程仓库,多了一个dev分支

img

此时的git分支类图是这样的

img

此时B同学开始进行开发,完成了自己的3次提交工作,使用git log 看一下

img

此时git的分支类图是这样子的

img

二、合并

现在有这样一个现实的请况,就是B同学准备进行第4次提交的时候,同学Amaster主分支上进行了一次提交,master的提交已经向前走了

此时的git分支类图是这样的

img

此时我们知道B同学开发的dev分支是基于C2提交点切出来的,而这个时候master分支已经被更新了

如果B同学开发完毕,需要将其所作的功能合并到master分支 ,他可以有两种选择:

2.1、git merge

(1)找到masterdev的共同祖先,即C2

(2)将dev的最新提交C5master的最新提交即C6合并成一个新的提交C7,有冲突的话,解决冲突

(3)将C2之后的devmaster所有提交点,按照提交时间合并到master

img

2.2、git rebase

切换分支到需要rebase的分支,这里是dev分支

执行git rebase master,有冲突就解决冲突,解决后直接git add . ,再git rebase --continue即可

发现采用rebase的方式进行分支合并,整个master分支并没有多出一个新的commit,原来dev分支上的那几次(C3C4C5commit记录在rebase之后其hash值发生了变化,不在是当初在dev分支上提交的时候的hash值了,但是提交的内容被全部复制保留了,并且整个master分支的commit记录呈线性记录

此时git的分支类图

img

三、总结

git merge 会让2个分支的提交按照提交时间进行排序,并且会把最新的2commit合并成一个commit。最后的分支树呈现非线性的结构

git reabsedev的当前提交复制到master的最新提交之后,会形成一个线性的分支树

四、最后

本人每篇文章都是一字一句码出来,希望对大家有所帮助,多提提意见。顺手来个三连击,点赞👍收藏💖关注✨,一起加油☕

相关文章:

  • 新手指南:Postman 旧版本(历史版本)下载
  • Unity类银河恶魔城学习记录1-12 PlayerComboAttack源代码 P39
  • js中原始类型和对象引用
  • 深入解析Elasticsearch的内部数据结构和机制:行存储、列存储与倒排索引之行存(一)
  • canvas设置图形各种混合模式,类似photoshop效果
  • 一篇文章了解系统眼中的键盘--以一个简单的系统分析从按键的输入到字符的显示
  • PyTorch中tensor.backward()函数的详细介绍
  • 微信小程序(三十三)promise异步写法
  • 从源代码看Chrome 版本号
  • 前后端分离,RSA加密传输方案
  • Vue学习笔记之组件基础
  • 基于STM32F103C8的宠物喂食系统设计
  • sui move笔记
  • C++学习Day03之构造函数和析构函数
  • 蓝桥杯刷题--python-1
  • $translatePartialLoader加载失败及解决方式
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • es6(二):字符串的扩展
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • java小心机(3)| 浅析finalize()
  • JDK9: 集成 Jshell 和 Maven 项目.
  • js作用域和this的理解
  • python_bomb----数据类型总结
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • webgl (原生)基础入门指南【一】
  • web标准化(下)
  • 测试开发系类之接口自动化测试
  • 分享一份非常强势的Android面试题
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 近期前端发展计划
  • 力扣(LeetCode)22
  • 前端性能优化--懒加载和预加载
  • 如何在 Tornado 中实现 Middleware
  • 我的业余项目总结
  • 我这样减少了26.5M Java内存!
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • ​如何在iOS手机上查看应用日志
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • (4)logging(日志模块)
  • (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
  • (c语言)strcpy函数用法
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (附源码)ssm学生管理系统 毕业设计 141543
  • .NET Standard 支持的 .NET Framework 和 .NET Core
  • .net 按比例显示图片的缩略图
  • .net 前台table如何加一列下拉框_如何用Word编辑参考文献
  • .NET 中让 Task 支持带超时的异步等待
  • .NET/C# 编译期间能确定的相同字符串,在运行期间是相同的实例
  • .Net各种迷惑命名解释
  • .net经典笔试题
  • .NET中统一的存储过程调用方法(收藏)
  • @entity 不限字节长度的类型_一文读懂Redis常见对象类型的底层数据结构
  • @property @synthesize @dynamic 及相关属性作用探究