Git 中 pull 操作和 rebase 操作的不同

2024-06-24 04:52
文章标签 操作 不同 git pull rebase

本文主要是介绍Git 中 pull 操作和 rebase 操作的不同,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

由于在开发过程中,pull 操作和 rebase 操作都是用来合并分支的,所以我就常常分不清这两个操作具体有什么区别,所以才有了这篇博客来做个简单区分,具体细致差别还请移步到官方文档:Git - Reference (git-scm.com)

1)pull 操作明确来说,实际是分为了两步操作:fetch + merge

fetch:进行 pull 操作的时候,git 首先会将远程仓库中的所有远程分支的最新一次提交内容拉取到本地仓库中对于远程仓库的跟踪分支中,相当于进行一次更新。但是这次更新并不会进行远程分支和本地分支的合并。

本地仓库中对于远程仓库的跟踪分支,简称为远程跟踪分支。远程跟踪分支是远程分支的本地副本,它们以 远程仓库(一般都为 origin ) / 远程分支名 的形式存在。fetch 会更新这些远程跟踪分支,使其与远程仓库中的分支同步。

merge:紧接着,会将当前的工作分支和已经建立了联系的对应的远程分支进行一次合并。又或者在 pull 操作的后续选项中指定了分支名,也会将指定的远程分支和当前本地的工作分支进行合并。

根据官方文档给出的示例,我们就能看出 pull 操作在 git 历史提交记录长什么样:

假设第二行中的 master 分支是我们当前本地的 master,提交历史为:D-E-F-G 。且本地的 master 分支最新一次与远程分支进行同步的节点为 E 。

第一行为远程仓库中的远程 master 分支,提交历史为:A-B-C

此时我们进行 pull 操作,就相当于将远程分支中的最新一次提交 C 同步到本地分支:

H 节点就为 pull 操作的第二步 merge 操作所产生的一次提交。可以看到,进行 pull 操作,由于默认第二步操作是使用了 merge 操作,因此会保留完整的提交记录。

2)rebase 操作称为变基操作,之所以叫做变基,是因为该操作改变了" 基础 ",实际作用就是改变提交的原本(" 基 ")位置。

还是借助官方文档给出的例子来进行解释:

假设新增本地有两个分支,master 和 topic ,现在在 topic 分支上进行 rebase master 的操作

此时 git 相当于会将 topic 分支的所有提交记录进行摘除,然后安接到 master 分支的最新一次分支,就相当于原本是基于 master 分支 E 节点所进行修改的 topic 上的所有记录,现在变成了基于 master 分支上的最新一次提交进行的修改似的:

可以看到,rebase 操作会将提交历史变得更加简洁整齐,呈线性的提交记录,不会出现明显的合并痕迹。

因此,其实 pull 操作和 rebase 之间并没有直接关联,真正关联的是 merge 操作和 rebase 操作。

二者所呈现的提交历史是不同的,具体需要哪个操作就需要看实际场景:

如果需要保持整齐的提交历史,那么就选择 rebase 操作;

如果想要保留完整的提交历史,那么就选择 merge 操作。

在 pull 操作中,默认第二步是使用 merge 操作,但是我们也可以指定使用 rebase 操作来合并分支,通过设置 git config --global pull.rebase true 来配置 rebase 选项来实现。

这篇关于Git 中 pull 操作和 rebase 操作的不同的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1089221

相关文章

java脚本使用不同版本jdk的说明介绍

《java脚本使用不同版本jdk的说明介绍》本文介绍了在Java中执行JavaScript脚本的几种方式,包括使用ScriptEngine、Nashorn和GraalVM,ScriptEngine适用... 目录Java脚本使用不同版本jdk的说明1.使用ScriptEngine执行javascript2.

C# 读写ini文件操作实现

《C#读写ini文件操作实现》本文主要介绍了C#读写ini文件操作实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录一、INI文件结构二、读取INI文件中的数据在C#应用程序中,常将INI文件作为配置文件,用于存储应用程序的

Python使用qrcode库实现生成二维码的操作指南

《Python使用qrcode库实现生成二维码的操作指南》二维码是一种广泛使用的二维条码,因其高效的数据存储能力和易于扫描的特点,广泛应用于支付、身份验证、营销推广等领域,Pythonqrcode库是... 目录一、安装 python qrcode 库二、基本使用方法1. 生成简单二维码2. 生成带 Log

Java操作ElasticSearch的实例详解

《Java操作ElasticSearch的实例详解》Elasticsearch是一个分布式的搜索和分析引擎,广泛用于全文搜索、日志分析等场景,本文将介绍如何在Java应用中使用Elastics... 目录简介环境准备1. 安装 Elasticsearch2. 添加依赖连接 Elasticsearch1. 创

java Stream操作转换方法

《javaStream操作转换方法》文章总结了Java8中流(Stream)API的多种常用方法,包括创建流、过滤、遍历、分组、排序、去重、查找、匹配、转换、归约、打印日志、最大最小值、统计、连接、... 目录流创建1、list 转 map2、filter()过滤3、foreach遍历4、groupingB

Java操作PDF文件实现签订电子合同详细教程

《Java操作PDF文件实现签订电子合同详细教程》:本文主要介绍如何在PDF中加入电子签章与电子签名的过程,包括编写Word文件、生成PDF、为PDF格式做表单、为表单赋值、生成文档以及上传到OB... 目录前言:先看效果:1.编写word文件1.2然后生成PDF格式进行保存1.3我这里是将文件保存到本地后

Python使用Colorama库美化终端输出的操作示例

《Python使用Colorama库美化终端输出的操作示例》在开发命令行工具或调试程序时,我们可能会希望通过颜色来区分重要信息,比如警告、错误、提示等,而Colorama是一个简单易用的Python库... 目录python Colorama 库详解:终端输出美化的神器1. Colorama 是什么?2.

Python视频剪辑合并操作的实现示例

《Python视频剪辑合并操作的实现示例》很多人在创作视频时都需要进行剪辑,本文主要介绍了Python视频剪辑合并操作的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习... 目录介绍安装FFmpegWindowsMACOS安装MoviePy剪切视频合并视频转换视频结论介绍

Windows自动化Python pyautogui RPA操作实现

《Windows自动化PythonpyautoguiRPA操作实现》本文详细介绍了使用Python的pyautogui库进行Windows自动化操作的实现方法,文中通过示例代码介绍的非常详细,对大... 目录依赖包睡眠:鼠标事件:杀死进程:获取所有窗口的名称:显示窗口:根据图片找元素:输入文字:打开应用:依

Python使用Pandas库将Excel数据叠加生成新DataFrame的操作指南

《Python使用Pandas库将Excel数据叠加生成新DataFrame的操作指南》在日常数据处理工作中,我们经常需要将不同Excel文档中的数据整合到一个新的DataFrame中,以便进行进一步... 目录一、准备工作二、读取Excel文件三、数据叠加四、处理重复数据(可选)五、保存新DataFram