git merge 与 git rebase 的区别

文章目录

  • 前言
  • 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 basegit 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.hqwc.cn/news/17658.html

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

相关文章

你不会还不知道什么是企业博客吧?

企业博客是指由企业或组织创建的在线平台,主要是用于发布与其业务、产品、行业和相关主题相关的文章、信息和观点。通过企业博客可以实现促进品牌推广、客户培养和业务发展等,对于企业发展有极其重要的作用。 企业博客的目的 1.提供有关企业产品和服务的…

vscode解决本地浏览器运行项目时的跨域问题-Live server

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 总结 最近在用face-api.js开发前端的实时人脸识别,加载已经训练好的tf模型,这一步需要加载模型json文件,但是本地测试的时候控制…

812. 打印数字

链接: 812. 打印数字 - AcWing题库 题目: 输入一个长度为 nn 的数组 aa 和一个整数 sizesize,请你编写一个函数, void print(int a[], int size), 打印数组 aa 中的前 sizesize 个数。 输入格式 第一行包含两个整数 nn 和 sizesize。 第二行包…

【tomcat】应用服务

准备环境 三台虚拟机 192.168.1.120 192.168.1.122 192.168.1.131 三台虚拟机关闭防火墙 、查看光盘 、检测yun创库 查看JDK是否安装 [rootlocalhost ~]# java -version openjdk version "1.8.0_161" //这是系统自带的rpm方式安装 OpenJDK Runtime Environment…

亚马逊云科技143项安全标准与合规性认证,帮助企业满足安全合规要求

在亚马逊云科技,为满足客户不断变化的需求,亚马逊云科技持续创新与迭代,设计的服务能帮助客户满足最严格的安全和合规性要求。针对安全相关工作,亚马逊云科技服务团队与Amazon Security Guardians云守护者项目密切配合&#xff0c…

什么是矢量数据库?

我们正处于人工智能革命之中。它颠覆了它所接触的任何行业,承诺了伟大的创新 – 但它也带来了新的挑战。对于涉及大型语言模型、生成式 AI 和语义搜索的应用程序,高效的数据处理变得比以往任何时候都更加重要。 所有这些新应用程序都依赖于向量嵌入&…

倍量过左峰选股公式,找到起爆点

左峰简单来说就是前期拉升形成的波段高点,左峰之后是回调,形成凹口,过左峰就是突破前期波段高点。从左峰的数量上,有过一峰、二峰、三峰等;从量价上,有倍量过左峰、缩量过左峰等。本文编写倍量过左峰选股公…

道路与航线(SPFA+双端队列优化)

题意:给了若干条道路,道路是双向边,航线是单向边,给了一些政策,如果从a到b有一条航线,那么一定不能通过一些道路和一些航线,从b到a。 分析:因为有负边权存在,所以这道题…

基础篇--STM32原理图设计

学会查看数据手册 芯片数据手册获取方式 ST官网:https://www.st.comST中文社区网:https://www.stmcu.org.cn/ 数据手册内容概要 芯片的基本参数(STM32F103ZET6为例) 主频/FLASH/SRAM : 72MHz/512KB/64KB工作电压/…

9款主流的平面设计工具推荐

设计平面图是设计师的基本技能。目前,市场上流行着大量的平面图工具,令人眼花缭乱。著名的平面图工程师Photoshop,但功能太多,操作界面难以快速启动,不适合初学者的设计。 我们应该如何选择合适的平面图设计工具&…

Todo-List案例版本二

(160条消息) Todo-List案例版本一_bubbleJessica的博客-CSDN博客 引入了localStorage&#xff0c;让案例更加完善 src/App.vue <template><div id"root"><div class"todo-container"><div class"todo-wrap"><MyHe…

Java 设计模式——单例模式

目录 1.结构2.实现2.1.饿汉式2.1.1.静态变量2.1.2.静态代码块2.1.3.枚举方式 2.2.懒汉式2.2.1.synchronized 线程安全2.2.2.双重检查锁2.2.3.静态内部类方式 3.破坏单例模式3.1.序列化反序列化3.2.反射 4.问题解决5.JDK 源码解析——Runtime 类 1.结构 &#xff08;1&#xff…