一图看懂git merge和git rebase的区别!!

一图看懂git merge和git rebase的区别!!

Git 是一个非常流行的版本控制系统,它帮助开发者管理代码的不同版本。在 Git 中,mergerebase 是两种常用的将不同分支的更改合并到一起的方法,但它们在处理方式和结果上有所不同。

Git Merge(合并)

  1. 定义git merge 是将两个或多个开发历史记录合并在一起的操作。
  2. 过程:当你执行 git merge 命令时,Git 会在两个分支之间创建一个新的“合并提交”(merge commit),这个提交会同时指向两个分支的历史点。
  3. 优点
    • 保留了完整的历史记录,可以清晰地看到分支的合并点。
    • 合并操作是不可逆的,不会改变项目的历史。
  4. 缺点
    • 可能会产生多余的合并提交,使得历史记录变得复杂。
    • 合并冲突可能更难以解决,因为它们被合并到了一个单独的提交中。

Git Rebase(变基)

  1. 定义git rebase 是将一系列提交从一个分支上摘下来,然后再应用到另一个分支上的操作。
  2. 过程:执行 git rebase 时,Git 会将当前分支上的提交暂存起来,然后将当前分支指向目标分支的顶部,之后将暂存的提交依次应用。
  3. 优点
    • 可以创建一个更干净、线性的提交历史。
    • 减少了合并提交的数量,使得历史记录更加清晰。
  4. 缺点
    • 变基会改变历史记录,如果不正确使用,可能会导致问题。
    • 变基操作是可逆的,但如果在变基后与其他人共享了分支,可能会引起混乱。

一图总结

A---B---C---D  Topic1 (初始状态)\E---F---G  Topic2 (初始状态)使用 git merge Topic2
A---B---C---D---H  Topic1 (合并后的Topic1)\            (H 是合并提交)E---F---G  Topic2使用 git rebase Topic2 到 Topic1
A---B---C---D---E'---F'---G'  Topic1 (变基后的Topic1)/E---F---G  Topic2 (E', F', G' 是重新应用的提交)

在上图中,Topic1Topic2 是两个分支,ADTopic1 的提交,EGTopic2 的提交。使用 git merge 会创建一个新的合并提交 H,而使用 git rebase 会将 EFG 重新应用到 D 的顶部,生成 E'F'G'

选择使用 merge 还是 rebase 通常取决于团队的工作流程和个人偏好。在公共分支上,通常推荐使用 merge 以保持历史的完整性,而在特性分支或个人分支上,使用 rebase 可以保持历史的清洁和线性。

综上总结

在这里插入图片描述

  • git merge和git rebase都具有合并分支的功能,
    但两者又有不同:
    rebase: 变基: 把一个分支的更改移动到另一个分支上,通常用于保持提交历史的线性和干净
    merge: 合并: 把一个分支的更改合并到另一个分支,合并后的提交会保留原始分支的提交历史
    rebase: 解决完冲突后不会产生额外的commit
    merge: 解决完冲突后会产生一个commit
    图中非常形象的展示了二者的不同,

  • 所以rebase是把main的commit记录给删掉了吗?

    • 回答:不是,变基是以目标分支的commit为基础合并,从而忽略main分支的提交记录。

仁者见仁,智者见智,个人推荐使用merge

  • git rebase 只适合在自己的branch用,不然一直会产生branch垃圾(可以删除解决)
  • 而且如果是团队开发,rebase对团队成员能力要求较高
  • rebase需要提交要遵守黄金法则,要慎重
  • 黄金法则; Never use rebase on public branches,永远不能在一个共享的分支上进行Git rebase操作。

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

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

相关文章

CP模型--Raft协议介绍

文章目录 前言一、Raft 是什么:二、Raft的工作原理:2.1 Raft 节点的3中状态:2.2 集群启动 leader 节点的选举:在这里插入图片描述2.3 数据的同步(日志复制):2.4 leader 重新选举:2.5…

目前公认的一些好用AI工具

ChatGPT:这是一个广泛推荐和使用的AI聊天机器人,能够进行高效的文本生成和对话管理。它在多个证据中被提及,显示其普遍性和实用性。 Midjourney:这是一款强大的AI绘画工具,特别适合创意写作和图像生成。它在多个来源中…

Web 安全漏洞之文件上传

目录 文件上传漏洞及危害 文件名 HTML 和 SVG 软链 服务器磁盘 防御方法 网络安全学习路线 (2024最新整理) 学习资料的推荐 1.视频教程 2.SRC技术文档&PDF书籍 3.大厂面试题 特别声明: 文件上传漏洞及危害 文件上传漏洞…

基于Idea搭建Android开发环境

文章目录 下载SDK ManagerAndroid SDK Platform-toolsAndroid SDK Build-toolsAndroid SDKAndroid SDK Extras IDEA设置创建TestApp导入Android Studio创建的项目 下载SDK Manager SDK Manager是Google提供的,专门用于下载/管理,安卓开发中需要用到的工…

CANopen总线_CANOpen开源协议栈

CANopen是自动化中使用的嵌入式系统的通信协议栈和设备配置文件规范。就OSI 模型而言,CANopen 实现了以上各层,包括网络层。 CANopen 标准由一个寻址方案、几个小型通信协议和一个由设备配置文件定义的应用层组成。通信协议支持网络管理、设备监控和节点…

java 解决跨域时遇到问题,怎么来做一个跨域环境

今天遇到一个问题: 关于#java#的问题:java 解决跨域时遇到问题:为什么跨域访问时配置的CorsFilter没有进入?直接访问请求地址时进入了配置的CorsFilter 由于没有实际的跨域环境,因此打算在本机建一个跨域环境&#xff…

庙算兵棋推演AI开发初探(4-调用AI模型)

前面讲了如何开展编写规则脚本型Agent(智能体)的方法,现在探究一下如何调用知识型(一般而言的训练出的模型)智能体的方法。 这次调用的是庙算平台的demo(网址见图) 下载了“知识强化学习型”…

【异常处理】(中北大学-程序设计基础(2))

目录 题目 源码 结果示例 题目 求一元二次方程式ax^2bxc0的实根&#xff0c;如果方程没有实根&#xff0c;则输入有关警告信息。要求&#xff1a;建立一元二次方程类&#xff0c;利用异常技术处理。 源码 #include <iostream> #include <cmath>using namespa…

力扣HOT100 - 763. 划分字母区间

解题思路&#xff1a; class Solution {public List<Integer> partitionLabels(String s) {int[] last new int[26];int len s.length();for (int i 0; i < len; i) {last[s.charAt(i) - a] i;//记录字母最远的下标}List<Integer> partition new ArrayList…

java spring boot动态数据库获得配置信息连接多数据源(数据库)

数据库 数据库文件和代码文件 https://download.csdn.net/download/qq_34631220/89304173 链接&#xff1a;https://pan.baidu.com/s/1xoh6xiSRx4nW_gKvR1QPjg 提取码&#xff1a;i7b7 –来自百度网盘超级会员V5的分享 文章位置 添加链接描述 说明&#xff1a;事务只能单库…

学习软考----数据库系统工程师32

NoSQL非关系型数据库 CAP理论和BASE特性 关系型数据库主要使用ACID理论 各种NoSQL数据 库的分类与特点

中国海洋大学整体来说值得报考吗?中国海洋大学考情分析。

中国海洋大学&#xff08;Ocean University of China&#xff09;&#xff0c;简称中国海大。位于中国青岛&#xff0c;是中华人民共和国教育部直属的综合性重点大学&#xff0c;国家“双一流”、“985工程”和“211工程”重点建设高校之一&#xff0c;入选“2011计划”、“111…

RT-Thread事件集

文章目录 前言一、RT-Thread事件集的概念二、事件集函数的使用1.创建事件集函数2.事件集发送函数3.事件集接收函数4.事件集删除函数 三、事件集使用例程总结 前言 本篇文章将给大家讲解RT-Thread中事件集的概念&#xff0c;了解什么是事件集及事件集的函数使用方法。 一、RT-…

Lesson5--二叉树(超详细版)

【本节目标】 1. 树概念及结构 2. 二叉树概念及结构 3. 二叉树顺序结构及实现 4. 二叉树链式结构及实现 1.树概念及结构 1.1树的概念 树是一种 非线性&#xff08;线性结构就是顺序表链表&#xff09; 的数据结构&#xff0c;它是由 n &#xff08; n>0 &#xff09;个…

Linux 第三十章

&#x1f436;博主主页&#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️‍&#x1f525;专栏系列&#xff1a;线性代数&#xff0c;C初学者入门训练&#xff0c;题解C&#xff0c;C的使用文章&#xff0c;「初学」C&#xff0c;linux &#x1f525;座右铭&#xff1a;“不要等到什么都没有了…

ms17-010(永恒之蓝)

1.漏洞介绍: 永恒之蓝&#xff08;ms17-010&#xff09;爆发于2017年4月14日晚&#xff0c;是一种利用Windows系统的SMB协议漏洞来获取系统的最高权限&#xff0c;以此来控制被入侵的计算机。甚至于2017年5月12日&#xff0c; 不法分子通过改造“永恒之蓝”制作了wannacry勒索病…

国际护士节庆祝活动向媒体投稿有方法很轻松

作为一名医院职工,我肩负着医院对外信息宣传的重任。在国际护士节这个特殊的日子里,我们医院举办了一系列庆祝活动,以表彰护士们的辛勤付出和无私奉献。然而,在将这些活动信息投稿至媒体的过程中,我最初却遭遇了诸多挑战。 起初,我采用传统的邮箱投稿方式,将精心撰写的稿件发送…

RabbitMq出现Not management user问题解决

在RabbitMq登录的时候突然弹出如下图&#xff1a; 提示“当前用户不是管理员用户”进入mq控制命令台下&#xff1a; windows版本在mq安装路径下的sbin下进入cmd弹出框&#xff1b; Linux版本没有测试&#xff1b; 输入以下命令&#xff1a; rabbitmqctl list_users 查询当…

栈与队列OJ题【括号适配问题】【用队列实现栈】【用栈实现队列】【设计循环队列】

一.有效的括号 ​​​OJ链接 这一道题我们就可以用栈来解决&#xff1a; 不了解栈的可以看我的上一篇博客。 typedef char STDataType; //用数组来实现栈 typedef struct stack {STDataType* a;int capacity;int top; }ST; void STInit(ST* pst) {assert(pst);pst->a NU…

内网环境安装使用DBeaver使用第一天

之前一直使用navicat&#xff0c;现在出于某种原因不让使用了&#xff0c;于是上手了这个工具&#xff0c;说实话&#xff0c;真的&#xff0c;但是必须要用。 首先安装的时候&#xff0c;必须要选择MySQL驱动&#xff0c;如果外网直接选择以后就可以下载了&#xff0c;内网需…