git merge 与 git rebase 的区别

news2024/11/18 1:45:24

文章目录

  • 前言
  • 1、使用 merge
  • 2、使用 rebase
  • 总结

前言

首先我们要清楚,git merge 与 git rebase 处理的问题是一样的,这两个命令都用于把一个分支的变更整合进另一个分支,只不过他们达成同样目的的方式不同。
在这里插入图片描述

刚开始,已经存在一条分支,这条分支的名字是base(黄色的),后来基于base分支,创建了new1分支,此时,base分支的指针和new1分支的指针都指向了base最新的提交。之后,base分支产生了新的提交,new1分支也产生了新的提交,两个分支的指针分别指向了自己分支的最新提交,换句话说就是,从分叉点开始以后,两个分支各自产生了属于自己的提交。

当前,你想把你提交的代码,从new1分支合并到base分支上,你有两种方法:merge 和 rebase。

1、使用 merge

git指令

git checkout base

git merge new1

结果:
在这里插入图片描述

将new1分支合并到base分支上,合并操作完成后,会产生一个新的提交(蓝色),这个新提交就是合并后的提交,它包含了两个分支中的最新代码,并且将它们合并到了一起,这个提交就是我们想要的合并后的状态,base分支的指针会指向这个新的蓝色提交,而new1分支的指针则没有移动位置,仍然指向了new1分支的最新提交(绿色)。为什么base分支的指针会指向最新的蓝色提交,而new1分支的指针却保持原位呢?原因是:在合并之前,base分支和new1分支都有属于自己独有的提交(最新的黄色提交只属于base分支,绿色提交只属于new1分支),如果我们是把new1分支合并到base分支上,就表示要把只属于new1分支上的变更合并到base分支上,对于base分支来说,会有新的变更进入,新变更进入后,base分支的内容会产生变化,所以,base分支需要一个新的提交(蓝色)来对应变化后的状态,于是,base分支的指针会指向最新产生的合并提交(蓝色),而对于new1分支来说,并没有任何内容发生变动,所以new1分支的指针仍然保持原位。

2、使用 rebase

git指令:

git checkout new1
git rebase base

结果:
在这里插入图片描述

  • new1待变基分支、当前分支
  • base 基分支、目标分支

new1分支是基于base分支的C拉出来的分支,new1的基底是C。而base在C之后有新的提交,就相当于此时要用base上新的提交来作为new1分支的新基底。实际操作为把C之后new1的提交先暂存下来,然后删掉原来这些提交,再找到base的最新提交位置,把存下来的提交再接上去(接上去是逐个和新基底处理冲突的过程),如此new1分支的基底就相当于变成了E而不是原来的C了。(注意,如果base上在C以后没有新提交,那么就还是用原来的C作为基,rebase操作相当于无效,此时和git merge就基本没区别了,差异只在于git merge会多一条记录Merge操作的提交记录)

总结

在这里插入图片描述

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

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

相关文章

Jmeter 做接口自动化测试的这些技巧你都掌握了吗

前言 JMeter 最初被设计用于 Web 应用测试,但后来扩展到了其他测试领域,可用于测试静态和动态资源,如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库和 FTP 服务器等等。JMeter 可对服务器、网络或对象模拟巨大的负载,…

DBF文件的解析介绍

1.基本介绍 DBF是Digital Beam Forming的缩写,“.dbf”文件扩展名代表据库处理系统所产生的数据库文件,起初意为保存数据的文件是一个简单的表,可以使用ASCII字符集添加、修改、删除或打印数据,随着产品变得越来越流行&#xff0…

SIN65 DM蓝牙5.2双模热插拔PCB

键盘使用说明索引(均为出厂默认值) 软件支持(驱动的详细使用帮助)一些常见问题解答(FAQ)首次使用步骤蓝牙配对规则(重要)蓝牙和USB切换键盘默认层默认触发层0的FN键配置的功能默认功…

idea连接远程MySQL数据库

填写URL,以mysql为例 格式 jdbc:mysql://ip地址:端口号/数据库名 jdbc:mysql://127.0.0.1:3306/ldentification _Information

在 Kubernetes 上体验 EMQX 5.0 的 MQTT over QUIC 特性

引言 作为全球领先的开源分布式 MQTT Broker,EMQX 在 5.0 版本中引入了 MQTT over QUIC,将 MQTT 协议的优势与 QUIC 的特性相结合。通过充分利用 QUIC 协议低连接开销和多路复用的特点,MQTT over QUIC 为弱网络环境和不规则网络中的用户提供…

lib/db 标准单元分类(Standard Cells in ASIC Design)、Track定义

文章目录 drain curruntThreshold Voltage (VTH)channel lengthtrack(Classification according to the Density)Standard Cell Layout drain currunt Drain current (Id) uCox(W/L)[(Vgs-Vth)Vds-(1/2)Vds^2] Coxepision/tox#饱和电流计算公式&#xf…

C#上位机开发广阔前景

作为一名C#上位机开发人员,我可以告诉你,C#是一门广泛使用的编程语言,在软件开发领域有很多机会和前途。以下是一些关于C#上位机开发的理由: 广泛应用:C#是微软的主要开发语言之一,被广泛用于开发各种类型…

Linux 性能优化(网络、磁盘、内存、日志监控)

文章目录 1、CPU性能监控1.2、平均负载基础1.3、平均负载与 CPU 使用率1.4、监控命令top命令mpstat命令pidstat场景一:CPU 密集型进程场景二:I/O 密集型进程场景三:大量进程的场景1.5、CPU上下文切换1.6、 遇到CPU利用率高该如何排查1.7、根据…

【java】获取前一天日期

//获取前一天日期//写法一LocalDate yesterday2 LocalDate.now().minusDays(1);System.out.println(yesterday2);//写法二LocalDate yes1 LocalDate.now().plusDays(-1);System.out.println(yes1);//输入当前日期的年 月 日System.out.println(LocalDate.now().getYear());…

Redis 的 LRU 与 LFU 算法实现

一、前言 原文地址 Redis是一款基于内存的高性能NoSQL数据库,数据都缓存在内存里, 这使得Redis可以每秒轻松地处理数万的读写请求。 相对于磁盘的容量,内存的空间一般都是有限的,为了避免Redis耗尽宿主机的内存空间,R…

【高通WLAN】WLAN bdf如何配置支持UMC设备和TSMC设备

除了用于台积电(TSMC)设备的现有bdf文件外,软件升级中还包括新的WLAN bdf文件,以支持UMC设备。 bdf文件导入的路径是 wlan_proc\wlan\halphy_tools\host\bdfUtil\qca61x0\bdf ■ TSMC(现有):bdwlan.xxx至bdwlan.bin ■ UMC(新):bdwlanu.xxx至bdwlanu.bin 以上配置…

可以带着游泳的耳机有哪些,推荐几款可以在水下使用的游泳耳机

在夏天里游泳是一件相当舒适的运动项目,比起汗流浃背的健身房,游泳池已经成为了更多人所倾向的地方,因为它不仅可以起到塑性的效果,而且还能够让自己时长保持在舒爽的状态,这时就会有朋友在问,游泳的时候节…

IDEA介绍

集成开发环境(IDE)简介 集成开发环境(IDE,Integrated Development Environment)是为程序开发提供便利的应用程序。通常包括代码编辑器、编译器、调试器和图形用户界面等工具。它们集成了代码编写、分析、编译、调试等…

时间序列预测 | Matlab鲸鱼算法(WOA)优化极限梯度提升树XGBoost时间序列预测,WOA-XGBoost时间序列预测模型,单列数据输入模型

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 鲸鱼算法(WOA)优化极限梯度提升树XGBoost时间序列预测,WOA-XGBoost时间序列预测模型,单列数据输入模型 评价指标包括:MAE、RMSE和R2等,代码质量极高,方便学习和替换数据。要求2018版本及以上。 部分源码 %% …

基于单片机停车场刷卡收费的设计与实现

功能介绍 以51单片机作为主控系统;以51单片机作为主控系统;通过液晶显示当前时间,车位、剩余车位、时间等信息;进电机正反转表示开关门;按键可以设置当前时间/单价/分钟;RC522射频卡识别,当刷卡…

Qt Core学习日记——第二天QMetaClassInfo

QMetaClassInfo是QMetaObject中用于存放类信息的数据结构 QMetaClassInfo定义: class Q_CORE_EXPORT QMetaClassInfo { public: Q_DECL_CONSTEXPR inline QMetaClassInfo() : mobj(nullptr), handle(0) {} const char *name() const; const char *value() co…

使用Jetpack Compose中的Pager构建滑动页面

Jetpack Compose是Google为Android开发者提供的一种现代化的UI工具包,它采用声明式UI范式,使得开发者能够更加简洁、直观地构建用户界面。在这篇博客中,我们将探讨如何使用Jetpack Compose中的Pager构建滑动页面。 什么是Pager? …

如何查看Linux是否开启了数据包转发功能

如果Linux主机有多块网卡,如果不开启数据包转发功能,则这些网卡之间是无法互通的。 如何开启数据包转发功能: echo 1 > /proc/sys/net/ipv4/ip_forward sysctl -w net.ipv4.ip_forward1 如何查看是否开启了数据包转发功能: …

Some Strategies for Reducing Write Amplification in LSM-tree

写放大原理 (6 封私信) 如何理解SSD的写放大? - 知乎 (zhihu.com) 日志结构化合并树(LSM 树) LSM 树: 与应用就地更新的传统

直播预约|漫漫用户增长之路,如何快人一手

【导读】 如何实现用户增长及提升用户活跃度是各大开发者关注的重点之一,日常运营过程中,消息推送作为一个触达用户的有效手段,通过恰当的时机和智能的投放模式,可以有效提升消息的曝光度并吸引用户点击,从而实现用户…