新来个技术总监,禁止我们用Git的rebase!?

news2024/10/10 14:21:21

△Hollis, 一个对Coding有着独特追求的人△

2f399faeecae33b84a20355828ca440f.jpeg

这是Hollis的第 429 篇原创分享

作者 l Hollis

来源 l Hollis(ID:hollischuang)

c675349d2a6e470732474050fde16091.png

在Git中,merge和rebase是两种不同的代码合并策略,它们用于将一个分支的更改合并到另一个分支。它们的主要区别在于合并的方式和提交历史的表现上

在介绍区别之前,我们先看下当我们从主干(Main)创建了一个新的分支(Feature)开始开发代码时,然后另外有人把自己的代码提交到主干(Main)之后,就会产生分叉的提交记录。

e0e3fab819d2e1b49ac50ab4cffd70a0.png

这时候你想把你的代码也提交到主干中,就有两个选择了:merge(合并),rebase(变基)

Merge

git checkout feature
git merge main
git merge feature main

以上两种都是把一个主干(main)的最新代码合并(merge)到分支(featrue)的方式。

这个操作会在分支中创建一个新的“merge commit”,它将两个分支的更改合并到一个新的提交中。

254c741f90e9b2fad2b3a6326e326841.png

如上图,就是我们把Main中的新提交Merge到我们的Feature分支中。

Rebase

作为merge的替代方法,您可以使用以下命令将功能分支重新设置为主分支:

git checkout feature
git rebase main

这会将整个feature移动到main分支的顶端,从而有效地将所有新提交合并到 main 中。但是,rebase不是使用merge commit,而是通过为原始分支中的每个提交创建全新的提交来重写项目历史记录。

18db496f8f8dd42bb7add6cb99cd023a.png

如上图,就是我们将Main中新的提交,通过rebase的方式合并到我们的Feature分支中。(另外我出了一份Java面试宝典,里面有600多道面试常考题目)

区别

当我们想要把一个分支合并到主干的时候,merge操作会通过merge commit的方式在主干上新建一个节点,并一次性的把分支中的修改合并到主干中。它的优点是分支代码合并后不破坏原分支的代码提交记录,缺点就是会产生额外的提交记录并进行两条分支的合并。

而rebase操作,不会在主干上新建节点,而是把分支上的所有历史提交都合并到主干中,形成一个完成的线性提交记录。他的优点是无须新增提交记录到目标分支,rebase后可以将对象分支的提交历史续上目标分支上,形成线性提交历史记录,进行review的时候更加直观。

所以,merge rebase可以保留完整的历史提交记录。

当你想要保留原始分支的提交历史,并且不介意在合并中产生额外的合并提交时,可以使用merge。在多人协作或公共分支上,merge是一个更安全和常见的选择,因为它保留了每个开发者的提交历史,易于跟踪和回溯。(另外我出了一份Java面试宝典,里面有600多道面试常考题目)

当你想要保持提交历史的整洁、线性,并且愿意改写提交历史时,可以使用rebase。在个人开发分支上,为了保持提交历史的简洁和易于阅读,rebase用的更多。

一般来说,在公司内部做团队开发,使用merge的情况会更多一些,我在工作中基本上90%的时间都是使用merge的。

Rebase黄金法则

一般来说,我们在工作中的开发模式都是基于分支开发,基于主干发布的模式。什么意思呢?

就是仓库中有一份主干的代码,线上运行的就是这套代码,当我们有需求要开发的时候,不会直接在主干上开发,而是基于主干拉一个分支出来,在分支中进行开发,开发好之后,再把这个分支的代码通过发布的方式合并到主干中。

在业内有一个rebase黄金法则:不要对已经提交到共享仓库(如远程仓库)的提交执行 rebase。

为什么要遵守这个黄金法则呢?

rebase会将所有的Main分支上的提交移动到Feature分支的顶端,问题是这个操作只发生在你自己的本地仓库中,所有的其他开发者是完全不感知的,因为他们是使用旧的Main分支创建的分支。(另外我出了一份Java面试宝典,里面有600多道面试常考题目)

5e57776db6417b0a208521ea14097134.png

这时候如果我们的Feature变更被推送到远程仓库后,其他人的Feature想要在提交的时候,就会产生大量的冲突。

所以,在多人协作中,应该遵循以下指导原则:

  1. 在个人开发分支上进行 rebase:如果你在个人开发分支上进行 rebase,这不会对其他开发者产生影响,因为这个分支只属于你个人。

  2. 在共享仓库的主分支上使用 merge:在共享仓库的主分支(如 master 或 main)上,推荐使用 merge 来将开发的功能或修复合并回主分支。这样可以保留每个开发者的提交历史,易于跟踪和回溯。

  3. 协作时协商:如果有特殊情况需要在共享仓库的分支上进行 rebase,应该与其他开发者进行充分协商,并确保大家都知道并同意这个变更。


本文内容节选自我最近出的Java面试宝典,类似的问题及答案还有600多道题。包括如何用Redis实现秒杀、如何防止库存超卖及少卖等。内容都像本文一样,都是真实的企业级方案,并不是那些网上随便找到的内容。

我们会持续更新内容,争取做到全网最新、最全、最准确的Java后端面试宝典。

之前一直在抖音上直播卖来着,最近因为要涨价了,所以在公众号上也发一下。之前卖了很多,大家评价都很好,基本没有差评(大家都知道程序员有多难伺候,这侧面证明了这个内容的价值了)

很多人也通过这份宝典上岸了 ,趁现在还未涨价(原价169,现在有70元优惠券,到手99,后续会不断涨价。。。),有需要的抓紧上车吧。


在线课程,文字形式,永久更新。

八股文面试宝典详细介绍:Java面试宝典介绍

下单后,不满意3天内可以无条件退款!只要你觉得它是任何一个市面上可以看到的面试题库可以比拟的,不管别人卖多少钱,只要你有这种感觉了,都直接来退款!就是这么自信!!

(下单后按照短信提示申请权限并联系客服审批即可)

9706f64d1110049bd04b4111e517a539.png

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

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

相关文章

动态内存常见的问题

对空指针的解引用 改正后的代码: 返回栈(临时变量)空间地址的问题 释放空间后及时把指针设为空 void Test(void) {char* str (char*)malloc(100);strcpy(str, "hello");free(str);str NULL;//释放空间后及时把指针设为空if (s…

嵌入式学习入门和求职经验

入门阶段:(不要只看书,要多动手,但千万不是直接动手,不去看书) C语言:嵌入式编程大多用C语言、少量汇编,先学习C语言,汇编用到的时候再上网查询。教材:随便一…

unity调用c++dll时变量处理问题

在C中为了处理方便可以将有些局部变量变为全局变量。 以下面三个变量为例 如果还有新全局变量需要这其来赋值,就会有问题。 如下面的body1_ptr为了dll生成处理方便,变为全局变量后,这个指针变赋值就会有问题。 因为geometry_path这个只在调…

上分秘籍 :如何用大模型跨模态能力核查网络谣言?

也许,你也曾听说过:👉眼见未必为实👉假新闻可比真新闻好传太多啦!👉谣言一张嘴,辟谣跑断腿大模型时代来临,除了肝,对付网络谣言,是不是有了新出路&#xff1f…

Java_23_并发包

并发包 并发包的来历: 在实际开发中如果不需要考虑线程安全问题,大家不需要做线程安全,因为如果做了反而性能不好! 但是开发中有很多业务是需要考虑线程安全问题的,此时就必须考虑了。否则业务出现问题。 Java为很多业…

考公笔记题

一、考公报名网址 国家公务员局:国家公务员局 二、历年题库 华图在线:国省考公务员题库_公职教育类在线题库-华图在线 公务员:《行测》与《申论》 重点学习: 判断推理(图形推理、定义判断(影响不大&am…

vue中的数据代理

vue数据代理 Vue实现数据代理的核心----Object.defineProperty(); 数据代理 数据代理的定义是:一个对象操作(读\写)另一个对象中的属性和方法。 // 数据代理:通过一个对象代理对另一个对象中属性的操作(读/写)let obj { x: 100…

STM32之智能小车,手把手从0到1,模块化编程

小车介绍 本博文将会从0到1实现一个智能小车,该小车实现功能:1. 摇头避障模式、2. 跟随模式、3. 循迹模式、4. 小车测速并显示在OLED屏幕、5. 语音控制小车等等。 硬件组成 STM32F103开发板、小车套件、L9110S电机模块、超声波模块(HC-SR04&a…

代码随想录算法训练营第二十五天 | 读PDF复习环节3

读PDF复习环节3 本博客的内容只是做一个大概的记录,整个PDF看下来,内容上是不如代码随想录网站上的文章全面的,并且PDF中有些地方的描述,是很让我疑惑的,在困扰我很久后,无意间发现,其网站上的讲…

Ubuntu-解决包依赖关系

Ubuntu-解决包依赖关系的办法 安装软件包的时候,有时会遇到类似下图的依赖问题,无法正常安装,下面提供三种方法解决依赖问题。 1.可以尝试用下面方法处理依赖问题,紧跟前一条安装命令后面输入下面命令,然后再执行安装…

第一次使用easyExcel报错信息记录 NullPointerException + MultipartException

第一次使用easyExcel报错信息记录 文章目录 第一次使用easyExcel报错信息记录NullPointerExceptionMultipartException NullPointerException 使用easyExcel报的错误 显示我的easyExcel监听器中出现了空指针异常 //报错信息 Creating a new SqlSessionClosing non transacti…

【Ajax】笔记-同源策略

同源策略(Same-Origin Policy),是浏览器的一种安全策略 同源(即url相同):协议、域名、端口号 必须完全相同。(请求是来自同一个服务) 跨域:违背了同源策略,即跨域。 ajax请求是遵循…

手把手教-gd32f450基于rt-thread发布的bsp包手动添加以太网外设

一、开发环境 rt-thread发布版本4.1.0; bsp包选用的是gd32目录下的gd32450z-eval rt-thread-v4.1.0\bsp\gd32\gd32450z-eval\ 开发板gd32f450z系列开发板。 二、手动添加以太网ETH外设 先看下初始结构 可以看到,配置中什么也没有。 手动添加步骤如下&…

27.提示卡片

提示卡片 html部分 <div class"msg-list"></div><button class"btn">点我看提示</button>css部分 *{margin: 0;padding: 0; }body{background-color: rebeccapurple;height: 100vh;overflow: hidden;display: flex;justify-con…

机器学习入门之 特征工程

数据集 数据集划分 ,训练集与 测试集合 from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.feature_extraction import DictVectorizer from sklearn.feature_extraction.text import CountVectorizer, TfidfVecto…

【FPGA/D6】

2023年7月25日 VGA控制器 视频23notecodetb 条件编译error时序图保存与读取&#xff1f;&#xff1f;RGBTFT显示屏 视频24PPI未分配的引脚或电平的解决方法 VGA控制器 视频23 note MCU单片机 VGA显示实时采集图像 行消隐/行同步/场同步/场消隐 CRT&#xff1a;阴极射线管 640…

8.9 PowerBI系列之DAX函数专题- TopN和BottomN和otherN的实现

需求 实现 1 summary table summarize(order_2,order_2[产品子类别],"订单金额",sum(order[订单金额])) 2 bottom5 table topn(5,summary table,summary table[订单金额],desc) // var v_sum_table summarize(order_2,order_2[产品子类别],"订单金额",…

【Linux】常见的基本指令详解

Linux常见的基本指令 一、什么是 Linux二、Linux 中常见的指令1. ls 指令2. pwd 命令3. cd 指令4. touch 指令5. mkdir 指令6. rmdir 指令 && rm 指令7. man 指令8. cp 指令9. mv 指令10. cat 指令11. more 指令12. less 指令13. wc 指令和 uniq 指令14. head 指令15. …

AIGC书籍推荐:《生成式深度学习的数学原理》

生成式 AI 使用各种机器学习算法&#xff0c;从数据中学习要素&#xff0c;使机器能够创建全新的数字视频、图像、文本、音频或代码等内容。生成式 AI 技术在近两年取得了重大突破&#xff0c;产生了全球性的影响。它的发展离不开近年来生成式深度学习大模型的突破。与一般意义…

【学习心得】sublime text 4 自定义编译系统

一、问题描述 在电脑中有多个版本的Python解释器&#xff0c;而sublime默认选择最新版本的解释器&#xff0c;如何指定自己想要的解释器呢&#xff1f; 二、自定义编译系统 1、选择新建编译系统&#xff08;如图&#xff09; 2、重写两个键值对&#xff08;只修改中文部分其…