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…

[ffmpeg] av_opt_set 解析

背景 ffmpeg 创建编码器的时候,可以设置一些额外参数。可以通过两种方式,一是 av_opt_set,另一种是 avcodec_open2 最后一个参数传入。今天先分析一下第一种是什么设置进去的。 具体代码分析 av_opt_set 主要分成两部分,一个是…

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

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

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

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

如何设置不同的网页标题(react)

通常&#xff0c;当我们写一个h5或者网站时&#xff0c;需要根据页面的业务来自定义网页标题。 这个本来是在入口html文件中设置的&#xff0c;但唯一。 <head><meta charset"UTF-8" /><!-- <link rel"icon" type"image/svgxml&qu…

【Flink on k8s】- 4 - 在 Kubernetes 上运行容器

目录 1、准备 k8s 集群环境、Docker 环境 2、启用 kubernetes 2.1 查询 k8s 集群基本状态

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

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

要求CHATGPT高质量回答的艺术:提示工程技术的完整指南—第 14 章:受控生成提示

要求CHATGPT高质量回答的艺术&#xff1a;提示工程技术的完整指南—第 14 章&#xff1a;受控生成提示 受控生成提示是一种可以高度控制输出结果的文本生成技术。 具体做法是为模型提供一组特定的输入&#xff0c;如模板、特定词汇或一组约束&#xff0c;用于指导生成过程。 …

C++代码自动化

摘要 在程序员的日常工作中&#xff0c;写代码并不是一件很枯燥乏味的事&#xff0c;因为本身通过代码已经实现了很多单靠人无法完成的工作。但随着代码工程量的加剧&#xff0c;代码逐渐的冗长而复杂&#xff0c;功能的调理型也逐渐的不清晰&#xff0c;这种现象一方面使得代…

Linux join命令教程:如何合并两个文件的行(附实例详解和注意事项)

Linux join命令介绍 Linux的join命令是一个非常有用的工具&#xff0c;它可以合并两个文件的行&#xff0c;这两个文件的行是通过一个公共字段来匹配的。这个命令可以为你的静态数据文件添加一些动态性。如果你想从两个文本文件中通过匹配一个公共字段来合并数据&#xff0c;你…

前端面试JS—数组的常用方法

目录 一、操作&#xff08;增/删/改/查&#xff09; 增 删 改 查 二、排序 三、转换 四、迭代 一、操作&#xff08;增/删/改/查&#xff09; 数组基本操作有 增、删、改、查&#xff0c;需要注意哪些方法会对原数组产生影响&#xff0c;哪些方法不会 增 下面前三种是对…

【S32K144】MCAL基础工程搭建

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

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

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

PHP处理字符串

一&#xff1a;字符串分割成数组 日常工作中&#xff0c;如果需要把一个字符串分割成数组&#xff0c;我们一般使用 explode() 函数对字符串进行分割&#xff0c;具体代码如下所示&#xff1a; <?php$str PHP|python|java|js|css|html; $arr explode(|,$str); print_r(…

linux的磁盘管理

Linux 提供了多种工具和技术来进行磁盘管理。下面是对 Linux 磁盘管理的详细解释&#xff1a; 磁盘和分区&#xff1a; 磁盘&#xff08;硬盘&#xff09;&#xff1a;Linux 系统中的磁盘通常是通过 SATA、SCSI、NVMe 等接口连接的物理硬盘。可以使用工具如 lsblk、fdisk、pa…

二叉平衡树

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

DAPP开发【11】IPFS星际文件管理系统

IPFS&#xff08;InterPlanetary File System&#xff09;是一个点对点的分布式文件系统&#xff0c;旨在创建一个更快速、更安全和更开放的 Web。它不同于传统的 HTTP 协议&#xff0c;因为它不需要使用一个固定的地址来访问文件&#xff0c;而是通过一个基于内容寻址的系统&a…

HNU程序设计 类和对象练习(小班)

学生类Student类的设计与实现 要求: 创建一个 Student 类&#xff0c;包含公有数据成员&#xff1a;姓名&#xff08;字符串&#xff09;、学号、性别、 3 门课程成绩 ( 结构 体形式&#xff0c;属性包含课程名和分数 ) &#xff0c;以及私有属性身份证信息。 &#xff08;…

python 实现 excle读取时间序列数据并画图显示

示例&#xff1a;Excle第一列为时间&#xff0c;第二列Num为秒为单位的时间&#xff0c;第三列到第九列为观测的温度数据。第一行为标签信息&#xff0c;第二行开始是数据。 实现功能&#xff1a;以第二列秒为单位的数据为横坐标&#xff0c;纵坐标为温度&#xff0c;将第三列到…