git 面试字节时,老师问:合并分支中 rebase 和 merge 的区别

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

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

图片

同学A:

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

图片

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

图片

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

图片

同学B:

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

图片

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

图片

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

图片

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

图片

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

图片

重点

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

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

图片

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

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

直接git merge,那么这个时候会这么做

  • (1)找到master和dev的共同祖先,即C2

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

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

图片

直接git rebase

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

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

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

此时git的分支类图

图片

总结

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

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

作者:小孔不菜

https://juejin.cn/post/7123826435357147166

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

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

相关文章

聚观早报 |东方甄选将上架文旅产品;IBM首台模块化量子计算机

【聚观365】12月6日消息 东方甄选将上架文旅产品 IBM首台模块化量子计算机 新思科技携手三星上新兴领域 英伟达与软银推动人工智能研发 苹果对Vision Pro供应商做出调整 东方甄选将上架文旅产品 东方甄选宣布12月10日将在东方甄选APP上线文旅产品,受这一消息影…

python二维数组创建赋值问题:更改单个值却更改了所有项的值

test_list [] dic1 {} test_list [dic1 for _ in range(3)] ll [1, 2, 3]for i in range(3):test_list[i][value] ll[i]print(test_list)运行结果:每次赋值都更改了所有项 原因:python的二位数据创建方式就是这样,官方文档中有描述Wha…

打工人副业变现秘籍,某多/某手变现底层引擎-Stable Diffusion图生图

我们都知道,模型在运算时是根据我们提供的提示内容来确定绘图方向,如果没有提示信息,模型只能根据此前的学习经验来自行发挥。在之前的文生图篇,我们介绍了如何通过提示词来控制图像内容,但想要实现准确的出图效果,只靠简短的提示词是很难满足实际需求的。 AI 绘画的随机…

SpringBoot+SSM项目实战 苍穹外卖(4) day4作业

继续上一节的内容,本节是作业课程,要求独立完成套餐管理模块所有业务功能,包括:新增套餐、套餐分页查询、删除套餐、修改套餐、起售停售套餐。 目录 新增套餐根据分类id查询菜品功能新增套餐功能 套餐分页查询删除套餐根据id查询套…

Java二阶知识点总结(一)Maven

一、Maven概念 Maven是一个项目管理工具,其主要作用有2点 依赖管理:管理项目依赖的各种jar包自动构建:项目构建的过程,从编译、测试、运行、打包到安装的过程可以一键执行 二、Maven工程的目录结构 src/main/java:…

【S32K144】MCAL基础工程搭建

目录 一、在S32DS创建Application Project 二、MCAL工程 三、基于MCAL的集成 以下示例基于S32K144EVB开发板进行。 一、在S32DS创建Application Project (1)新建工程Application Project (2)工程配置 (3&#xff…

正则表达式(5):常用符号

正则表达式(5):常用符号 小结 本博文转载自 在本博客中,”正则表达式”为一系列文章,如果你想要从头学习怎样在Linux中使用正则,可以参考此系列文章,直达链接如下: 在Linux中使用正…

二叉平衡树

一直想深入的研究一下,并手写平衡二叉树的插入、删除代码。 二叉树是动态查找的典范,但在极限情况下,二叉树的查找效果等同于链表,而平衡二叉树可以完美的达到 log ⁡ 2 n \log_2 n log2​n。 AVL简称平衡二叉树,缩写…

Linux系统调试课:I2C tools调试工具

文章目录 一、如何使用I2C tools测试I2C外设1、I2C tools概述: 2、下载I2C tools源码:3、编译I2C tools源码: 4、i2cdetect 5、i2cget 6、i2cdump

Vue+ElementUI技巧分享:结合Sortablejs实现表格行拖拽

文章目录 前言准备工作示例代码代码说明1. 引入依赖和组件结构2. 组件数据和生命周期3. 实现拖拽功能4. 更新数据和服务器同步 运行效果总结 前言 在很多动态网页应用中,用户界面的交互性是提高用户体验的关键。在 Vue.js 中,结合 Element UI 和 sortab…

初识树型结构与二叉树

1. 树型结构 树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树(它是根朝上,而叶朝下的),其物理结构如下图所示&#x…

Ubuntu 20.04 安装 mysql8 LTS

Ubuntu 20.04 安装 mysql8 LTS sudo apt-get update sudo apt-get install mysql-server mysql --version mysql Ver 8.0.35-0ubuntu0.20.04.1 for Linux on x86_64 ((Ubuntu)) Ubuntu20.04 是自带了 MySQL8. 几版本的,低于 20.04 则默认安装是 MySQL5.7.33 s…

rpm安装gitlab

1.rpm包下载 https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/ 2.进行安装 rpm -ivh gitlab-ce-15.9.7-ce.0.el7.x86_64.rpm --nodeps --force 3.配置访问地址 vim /etc/gitlab/gitlab.rb 4.重新加载配置以及重启服务 gitlab-ctl reconfiguregitlab-ctl resta…

<Linux>(极简关键、省时省力)《Linux操作系统原理分析之Linux文件管理(2)》(26)

《Linux操作系统原理分析之Linux文件管理(2)》(26) 8 Linux文件管理8.4 虚拟文件系统 VFS8.4.1 VFS 的工作原理8.4.2 VFS 超级块8.4.3VFS 的 inode 8.5 文件系统的安装与注册8.5.2 文件系统的注册 8 Linux文件管理 8.4 虚拟文件系…

HarmonyOS4.0从零开始的开发教程05 应用程序入口—UIAbility的使用

HarmonyOS(三)应用程序入口—UIAbility的使用 UIAbility概述 UIAbility是一种包含用户界面的应用组件,主要用于和用户进行交互。UIAbility也是系统调度的单元,为应用提供窗口在其中绘制界面。 每一个UIAbility实例,…

python数据分析基础

前言 2023年10月以来,一位在商学院就读的可爱同学遇上了一门课——python数据分析,并遇到了许多问题,找上了我,就此,我也开始了学习之路,虽然很浅显,但这些东西对部门同学来说也是受用的&#…

Weblogic CVE-2023-21839(metasploit版)

Step1:用docker搭建环境 Step2:docker查看映射端口 Step3:访问特定端口,然后靶标应用。 Step4:用metasploit进行攻击: 首先,打开metasploit,然后查询需要攻击的板块&#xff0…

指定分隔符对字符串进行分割 numpy.char.split()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 指定分隔符对字符串进行分割 numpy.char.split() 选择题 请问下列程序运行的的结果是: import numpy as np print("【执行】np.char.split(I.Love.China, sep .)") p…

Linux进程解析(冯诺依曼体系结构,操作系统,进程初步解析)

冯诺依曼体系结构: 我们常见的计算机,如笔记本。我们常见的计算机,服务器,大部分都遵守冯诺依曼体系。 截至目前,我们所认识的计算机,都是有一个个的硬件组件组成: 中央处理器(CPU)&am…

Linux socket编程(12):Unix套接字之socketpair、sendmsg和recvmsg详解

在上一篇文章Unix套接字编程及通信例子中,我们对Unix套接字编程有一个基本的了解。但在Unix套接字编程的领域中,有一组特殊而强大的工具:socketpair、sendmsg 和 recvmsg,它们为实现本地进程间通信提供了便捷的方式。 文章目录 1 …