【git】git pull 和 git rebase

git pullgit rebase 都是 Git 中用于同步代码的命令,但它们的工作方式适用场景有显著区别。以下是两者的详细对比:


1. 核心区别

特性git pullgit rebase
本质git fetch + git merge(默认)将当前分支的提交“重新播放”到目标分支上
历史记录生成合并提交(Merge Commit)线性历史,无额外合并提交
适用场景公共分支(如 main)同步本地分支整理,私有分支优化历史
是否会重写历史是(会修改提交的 SHA-1)
冲突处理方式一次性解决所有冲突每个提交单独解决冲突

2. 工作流程对比

(1) git pull(默认合并方式)

git checkout main
git pull origin main

等效于

git fetch origin       # 拉取远程最新代码
git merge origin/main  # 合并到当前分支

结果
如果远程有更新,会生成一个合并提交(Merge Commit),历史记录会保留分支结构。


(2) git pull --rebase(变基方式)

git checkout feature
git pull --rebase origin main

等效于

git fetch origin
git rebase origin/main  # 将当前分支的提交“重新播放”到 main 分支上

结果
不会生成合并提交,历史记录是线性的,看起来更整洁。

(3) 直接使用 git rebase

git checkout feature
git fetch origin         # 先获取远程更新
git rebase origin/main   # 手动变基

适用场景
当你想要更精细地控制变基过程(如交互式变基 git rebase -i)。


3. 如何选择?

场景推荐命令原因
公共分支(如 maindevgit pull(默认合并)保留完整合并历史,避免重写公共历史
个人/本地分支整理git pull --rebase保持线性历史,避免多余合并提交
需要修改本地提交历史git fetch + git rebase更灵活,可交互式修改提交

4. 注意事项

  1. 不要对已推送的分支使用 git rebase
    • 变基会重写历史,如果其他人基于你的旧提交工作,会导致混乱。
    • ✅ 仅对本地分支使用 rebase

  2. 冲突处理差异
    git pull(合并方式):一次性解决所有冲突。
    git rebase:可能需要对每个提交单独解决冲突。

  3. 可以配置 git pull 默认使用 --rebase

    git config --global pull.rebase true  # 让 git pull 默认用 --rebase
    

5. 总结

git pull = 拉取远程代码 + 合并(适合公共分支)
git rebase = 重写本地提交历史(适合私有分支整理)
git pull --rebase = 拉取远程代码 + 变基(推荐用于个人分支同步)

选择哪种方式取决于你是否需要保留合并历史,以及是否在团队协作环境中工作。

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

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

相关文章

DIY搭建网站(学术个人介绍主页)

本教程介绍了如何创建并管理一个基于GitHub Pages的个人网站。首先,需要在GitHub上创建一个遵循特定命名规则的新仓库,例如用户名.github.io,以便建立个人站点。接着,通过Fork一个开源模板代码仓库并添加index.html文件来构建主页…

数据结构初阶:二叉树的前中后序三种遍历(递归的暴力美学)

想要实现二叉树的遍历可以创建一个链式结构的二叉树 回顾一下二叉树的概念,二叉树分为空树和非空二叉树,非空二叉树由根节点、根节点的左子树和根节点的右子树组成。 typedef char BTDataType; // 数据类型 typedef struct BinaryTreeNode {B…

WebUI问题总结

修改WebUI代码时遇到的一些问题以及解决办法 1. thttpd服务器环境的搭建 可参考《thttpd安装与启动流程》这一篇文章 其中遇到的问题有 thttpd版本问题:版本过旧会导致安装失败,尽量安装新版本thttpd的启动命令失败的话要加上sudo修改文件权限&#…

【C++重点】deque

C queue 容器介绍 queue 是 C 标准库中的一个容器适配器,它实现了先进先出(FIFO)数据结构。即,元素按照插入的顺序排队,首先插入的元素最先出队。queue 适用于需要排队处理任务的场景,比如消息队列、任务调…

透过 /proc 看见内核:Linux 虚拟文件系统与 systemd 初始化初探

当我们在终端中输入 ps、top、cat /proc/cpuinfo 等命令时,是否思考过这些信息来自哪里?为什么无需启动任何守护进程,就能实时读取系统负载、内存占用,甚至内核版本?这一切的答案,都藏在 Linux 系统中的一个…

操作系统(中断 异常 陷阱) ─── linux第28课

目录 1.硬件中断 2. 时钟中断 3. OS本质 4. 软件中断 缺页中断?内存碎片处理?除零野指针错误? 操作系统本质总结 操作系统是对软件硬件资源管理的软件 1.硬件中断 中断向量表(IDT)就是操作系统的⼀部分,启动就加载到内存中了…

文件分片上传

1前端 <inputtype"file"accept".mp4"ref"videoInput"change"handleVideoChange"style"display: none;">2生成hash // 根据整个文件的文件名和大小组合的字符串生成hash值&#xff0c;大概率确定文件的唯一性fhash(f…

机器学习的一百个概念(5)数据增强

前言 本文隶属于专栏《机器学习的一百个概念》&#xff0c;该专栏为笔者原创&#xff0c;引用请注明来源&#xff0c;不足和错误之处请在评论区帮忙指出&#xff0c;谢谢&#xff01; 本专栏目录结构和参考文献请见[《机器学习的一百个概念》 ima 知识库 知识库广场搜索&…

基于微信小程序的智慧乡村旅游服务平台【附源码】

基于微信小程序的智慧乡村旅游服务平台&#xff08;源码L文说明文档&#xff09; 目录 4系统设计 4.1系统功能设计 4.2系统结构 4.3.数据库设计 4.3.1数据库实体 4.3.2数据库设计表 5系统详细实现 5.1 管理员模块的实现 5.1.1旅游景点管理…

数据驱动的智能BMS革新:机器学习赋能电池健康预测与安全协同优化

传统电池管理系统&#xff08;BMS&#xff09;依赖等效电路模型和固定参数算法&#xff0c;面临电化学机理复杂、老化行为非线性、多工况适应性差等瓶颈。例如&#xff0c;健康状态&#xff08;SOH&#xff09;和荷电状态&#xff08;SOC&#xff09;估算易受温度、循环次数及电…

使用JSON.stringify报错:Uncaught TypeError: cyclic object value

具体错误 Uncaught TypeError: cyclic object valueonMouseOver Amap.vue:125renderMarker Amap.vue:84emit maps:1emit maps:1ci maps:1ui maps:1fireEvent maps:1jL maps:1Xt maps:1T maps:1<anonymous> amap.vue:49promise callback*nextTick runtime-core.esm-bundl…

Spring Boot 工程创建详解

2025/4/2 向全栈工程师迈进&#xff01; 一、SpingBoot工程文件的创建 点击Project Structure 然后按着如下点击 最后选择Spring Boot &#xff0c;同时记得选择是Maven和jar&#xff0c;而不是war。因为Boot工程内置了Tomcat&#xff0c;所以不需要war。 紧接着选择Spring We…

Java 8 的流(Stream API)简介

Java 8 引入的 Stream API 是一个强大的工具&#xff0c;用于处理集合&#xff08;如 List、Set&#xff09;中的元素。它支持各种操作&#xff0c;包括过滤、排序、映射等&#xff0c;并且能够以声明式的方式表达复杂的查询操作。流操作可以是中间操作&#xff08;返回流以便进…

4. Flink SQL访问HiveCatalog

一. 实验环境 Flink版本: 1.19.1 Hive版本: 2.1.3 Hadoop版本: 3.2.4二. 操作步骤 1.上传所需的jar包到Flink lib目录下 [roothadoop3 ~]# mv flink-sql-connector-hive-3.1.3_2.12-1.19.1.jar /www/flink-1.19.1/lib [roothadoop3 ~]# mv hadoop-mapreduce-client-core-3.2…

虚拟试衣间-云尚衣橱小程序-衣橱管理实现

衣橱管理实现 目标 (Goal): 用户 (User): 能通过 UniApp 小程序上传衣服图片。 后端 (Backend): 接收图片,存到云存储,并将图片信息(URL、用户ID等)存入数据库。 用户 (User): 能在小程序里看到自己上传的所有衣服图片列表。 技术栈细化 (Refined Tech Stack for this Pha…

HAL库 通过USB Boot进行APP程序升级

硬件&#xff1a;stm32f407VET6芯片&#xff1b; 软件&#xff1a;STM32CubeMx、Keil5 上位机&#xff1a;Dfuse DemoV3.06 这里给出通过在Bootlaoder中使用USB方式来更新APP程序的方法&#xff0c;首先我们编写一个自己的bootloader&#xff0c;关于bootloader的大致原理可以…

数据库权限获取

1. into outfile&#xff08;手写&#xff09; 1.1. 利用条件 • web 目录具有写入权限&#xff0c;能够使用单引号 • 知道网站绝对路径&#xff08;根目录&#xff0c;或则是根目录往下的目录都行&#xff09; • secure_file_priv 没有具体值&#xff08;在 mysql/my.ini…

关于ESP系列MCU的UART download原理

GPIO0&#xff0c;即BOOT&#xff0c;工作模式选择&#xff1a; 悬空/拉高&#xff1a;正常MCU启动工作状态 下拉接地&#xff1a;UARTDownload下载模式 如何进入UARTDownload下载模式&#xff1f; 先按下boot按键不放&#xff0c;再按下rst按键 / en按键&#xff0c;随后释放…

无需安装Office进行 Word、Excel操作的微软开发库

微软的确有一些无需安装完整 Office 就能进行 Word、Excel 操作的开发库&#xff0c;以下为你介绍&#xff1a; 1. Microsoft Graph API 简介&#xff1a;Microsoft Graph API 是一个强大的 RESTful API&#xff0c;能让开发者通过调用接口访问 Office 365 服务里的各种资源&…

【一起来学kubernetes】34、ReplicaSet使用详解

Kubernetes ReplicaSet 使用详解 ReplicaSet 是 Kubernetes 中用于确保指定数量的 Pod 副本持续运行的核心控制器。它通过动态调整 Pod 副本数&#xff0c;保障应用的高可用性和弹性。以下是其核心功能、配置方法及最佳实践&#xff1a; 一、ReplicaSet 核心作用 维持 Pod 副本…