当前位置: 首页 > article >正文

深入理解 `git pull --rebase` 与 `--allow-unrelated-histories`:区别、原理与实战指南

🚀 git pull --rebase vs --allow-unrelated-histories 全面解析

在日常使用 Git 时,我们经常遇到两种拉取远程代码的方式:git pull --rebasegit pull --allow-unrelated-histories。它们的区别是什么?各自适用哪些场景?本文将从命令对比、底层原理到实际使用场景,一次性讲清楚!


✅ 1. 命令对比速查表

命令用途是否涉及变基(Rebase)适用场景
git pull --rebase将本地提交“线性”接在远程最新提交之后✅ 是本地和远程有相同历史,但提交分叉时使用(协作开发常见)
git pull origin main --allow-unrelated-histories合并两个完全不相关的历史❌ 否本地新建仓库,远程已有提交,需强制合并两个历史

🔍 2. 关键区别详解

🌀 git pull --rebase

  • 作用:把本地提交“重接”到远程最新提交之后,保持线性历史。

    假设当前历史:

    远程:A → B → C
    本地:A → B → D
    

    执行后:

    A → B → C → D
    
  • 本质git fetch + git rebase


🔗 git pull origin main --allow-unrelated-histories

  • 作用:允许合并两个完全无关的历史(Git 默认会拒绝)。

    场景:本地新建空仓库 git init,远程已有历史,如:

    本地:无
    远程:X → Y → Z
    

    合并后:

    X → Y → Z + 本地内容(README.md等)
    
  • 本质git fetch + git merge --allow-unrelated-histories


🧪 3. 示例流程解析

# 初始化 Git 仓库
git init# 添加远程仓库
git remote add origin https://github.com/你的用户名/仓库名.git# 获取远程内容
git fetch origin# 创建本地分支并切换
git checkout -b main# 拉取远程内容(允许不相关历史)
git pull origin main --allow-unrelated-histories

❓ 为什么需要 --allow-unrelated-histories

因为你本地是全新仓库,历史为空,而远程已有提交历史。默认合并会被 Git 拒绝,该选项用于强制合并。


🤔 4. 什么时候用哪个命令?

场景推荐命令
常规协作开发(历史一致,想保持线性)git pull --rebase
新仓库首次同步远程已有内容git pull origin main --allow-unrelated-histories
需要保留所有合并记录git pull(默认 merge)

⚠️ 5. 注意事项

  • --rebase 风险:
    如果变基的提交已经推送过远程,再使用 git push --force 会覆盖历史,影响团队协作

  • --allow-unrelated-histories
    通常只在项目初始化时使用,后续开发应改用常规 pull 方式。


📚 什么是 Git 中的“变基(Rebase)”?

变基的本质:将一组提交的“基”从一个提交点移动到另一个提交之上,形成线性历史。


🔍 1. 什么是“基”(Base)?

  • 每个 Git 提交都有一个或多个“父提交”。
  • “基”就是当前提交所依赖的上一层提交。

🌰 示例:

远程 main: A → B → C  
你的 feature: A → B → D → E

执行 git rebase main 后:

A → B → C → D' → E'
  • 虽然内容相同,但 D'E' 的“父提交”从 B 变成了 C

⚙️ 2. Rebase 的工作原理

  1. 找到共同祖先(如 B
  2. 提取当前分支的更改(DE 相对 B 的差异)
  3. 将更改应用到目标分支的最新提交(如 C
  4. 更新分支指针(feature 指向 E'

🎯 3. 为什么要用 Rebase?

✅ 优点

  • 保持历史清晰、线性
  • 避免不必要的 merge 提交
  • 更方便阅读历史

❌ 风险

  • 不要对已推送提交变基,会影响他人
  • 可能出现冲突,需要手动解决

🔄 4. Rebase vs Merge 对比

操作历史结构场景
git merge分叉 + 合并提交团队开发需保留合并记录
git rebase线性历史个人开发,历史整洁优先

🌰 示例:

# merge 后历史:
A → B → C → D → E → F (Merge Commit)# rebase 后历史:
A → B → C → D' → E' → F

🛡️ 5. 如何安全使用 Rebase?

# 对本地未推送提交变基
git rebase main# 已推送过,强制推送要小心
git push --force-with-lease# 遇到冲突
git add <冲突文件>
git rebase --continue

🧾 总结

  • git pull --rebase:保持历史线性,适用于协作开发
  • --allow-unrelated-histories:用于初始化时强制合并无关历史
  • Rebase 本质是改变提交的“基”,让提交历史更清晰
  • 小心使用 Rebase,尤其是涉及到已推送的代码!

希望这篇文章让你彻底搞懂 Git 中的变基和不同的拉取方式!如果觉得有帮助,欢迎点赞收藏 ⭐️!


相关文章:

深入理解 `git pull --rebase` 与 `--allow-unrelated-histories`:区别、原理与实战指南

&#x1f680; git pull --rebase vs --allow-unrelated-histories 全面解析 在日常使用 Git 时&#xff0c;我们经常遇到两种拉取远程代码的方式&#xff1a;git pull --rebase 和 git pull --allow-unrelated-histories。它们的区别是什么&#xff1f;各自适用哪些场景&…...

ExpTimerApcRoutine函数分析之作用是ActiveTimerListHead里面移除定时器_etimer

第一部分&#xff1a; VOID ExpTimerApcRoutine ( IN PKAPC Apc, IN PKNORMAL_ROUTINE *NormalRoutine, IN PVOID *NormalContext, IN PVOID *SystemArgument1, IN PVOID *SystemArgument2 ) /* Routine Description: This function is the special …...

Ovito的python脚本

在 OVITO 里,Python 对象是构建脚本化操作的基础。下面为你详细介绍 OVITO 中 Python 对象的基本概念: 1. 数据管道(Pipeline) 数据管道是 OVITO 里最核心的对象之一。它就像一个流水线,把数据输入进来,经过一系列处理步骤,最后输出处理好的数据。 创建管道:借助 imp…...

【免费】2007-2019年各省地方财政文化体育与传媒支出数据

2007-2019年各省地方财政文化体育与传媒支出数据 1、时间&#xff1a;2007-2019年 2、来源&#xff1a;国家统计局、统计年鉴 3、指标&#xff1a;行政区划代码、地区、年份、地方财政文化体育与传媒支出 4、范围&#xff1a;31省 5、指标说明&#xff1a;地方财政在文化、…...

3PL EDI:SA Piper Logistics EDI需求分析

SA Piper Logistics成立于2005年&#xff0c;是一家专注于全球供应链管理的第三方物流服务商&#xff08;3PL&#xff09;&#xff0c;总部位于美国芝加哥。公司以“优化物流效率&#xff0c;重塑供应链价值”为使命&#xff0c;提供仓储管理、运输规划、订单履行及跨境清关等一…...

NOIP2007提高组.矩阵取数游戏

题目 492. 矩阵取数游戏 思路 不难发现, 每一行之间是独立的, 因此可以求出每一行的最大值, 然后行与行之间最大值相加, 就是总的最大值 对于行内来说, 每次可以选取左边或者右边, 可以使用区间 d p dp dp求解, 时间复杂度 O ( n 3 ) O(n ^ 3) O(n3), 因为列的最大值是 80 …...

项目实战--权限列表

后端数据&#xff1a; 用表格实现权限列表 const dataSource [{key: 1,name: 胡彦斌,age: 32,address: 西湖区湖底公园1号,},{key: 2,name: 胡彦祖,age: 42,address: 西湖区湖底公园1号,}, ];const columns [{title: 姓名,dataIndex: name,key: name,},{title: 年龄,dataInd…...

若依赖前端处理后端返回的错误状态码

【背景】 后端新增加了一个过滤器&#xff0c;用来处理前端请求中的session 若依赖存放过滤器的目录&#xff1a;RuoYi-Vue\ruoyi-framework\src\main\java\com\ruoyi\framework\security\filter\ 【问题】 后端返回了一个状态码为403的错误&#xff0c;现在前端需要处理这…...

【计网】数据包

期末复习自用的&#xff0c;处理得比较草率&#xff0c;复习的同学或者想看基础的同学可以看看&#xff0c;大佬的话可以不用浪费时间在我的水文上了 1.数据包的定义&#xff1a; 数据包是网络通信中的基本单元&#xff0c;它包含了通过网络传输的所有必要信息。数据包的结构…...

web权限划分提权和移权

前言&#xff1a;权限的基本认知 渗透权限划分&#xff1a;假如我们通过弱口令进入到web的后台 这样我们就拿到了web的管理员权限 管理员权限是web中最高的权限&#xff08;一般我们进入web的时候数据库会进行用户权限的划分&#xff1a;假设 0-10为最高的权限 11-10000为普通…...

LocalDateTime序列化总结

版权说明&#xff1a; 本文由CSDN博主keep丶原创&#xff0c;转载请保留此块内容在文首。 原文地址&#xff1a; https://blog.csdn.net/qq_38688267/article/details/146703276 文章目录 1.背景2.序列化介绍常见场景关键问题 3.总体方案4.各场景实现方式WEB接口EasyExcelMybat…...

[ 春秋云境 ] Initial 仿真场景

文章目录 靶标介绍&#xff1a;外网内网信呼oa永恒之蓝hash传递 靶标介绍&#xff1a; Initial是一套难度为简单的靶场环境&#xff0c;完成该挑战可以帮助玩家初步认识内网渗透的简单流程。该靶场只有一个flag&#xff0c;各部分位于不同的机器上。 外网 打开给的网址, 有一…...

unity 截图并且展现在UI中

using UnityEngine; using UnityEngine.UI; using System.IO; using System.Collections.Generic; using System; using System.Collections;public class ScreenshotManager : MonoBehaviour {[Header("UI 设置")]public RawImage latestScreenshotDisplay; // 显示…...

XHR.readyState详解

XHR.readyState详解 引言 XHR.readyState是XMLHttpRequest对象的一个属性,它反映了当前请求的状态。在Ajax编程中,正确理解和使用XHR.readyState对于调试和确保异步请求的正确执行至关重要。本文将详细介绍XHR.readyState的属性值、含义以及在Ajax请求中的具体应用。 XHR.…...

SQL Server数据库引擎服务启动失败:端口冲突

问题现象&#xff1a; SQL Server 2022 安装完成后&#xff0c;数据库引擎服务无法启动&#xff0c;日志报错 “TCP 端口 1433 已被占用”&#xff08;ERROR_LOG_SYS_TCP_PORT&#xff09;。 快速诊断 检测端口占用&#xff1a; # 查看 1433 端口占用情况&#xff08;需管理员权…...

前端知识点---用正则表达式判断邮箱(javascript)

// 全面的正则&#xff08;兼容大多数情况&#xff09; const emailRegex /^[a-zA-Z0-9._%-][a-zA-Z0-9.-]\.[a-zA-Z]{2,}$/;// 或直接使用浏览器内置验证 <input type"email" required>/&#xff1a;正则表达式的起始和结束标志。 ^&#xff1a;匹配字符串的…...

中断管理常用API(四)

一、request_irq(...) request_irq 函数主要用于硬中断相关操作&#xff0c;它的核心作用是把一个中断处理函数和特定的中断号进行绑定。当硬件设备触发该中断号对应的中断时&#xff0c;内核就会调用绑定的中断处理函数&#xff0c;像 irqhandler_func 这类。 此函数在多种硬件…...

RabbitMQ高级特性--重试特性

目录 1.重试配置 2.配置交换机&队列 3.发送消息 4.消费消息 5. 运行程序观察结果 6. 手动确认 注意&#xff1a; 在消息传递过程中, 可能会遇到各种问题, 如网络故障, 服务不可用, 资源不足等, 这些问题可能导致消息处理失败. 为了解决这些问题, RabbitMQ 提供了重试机制, …...

pyspark学习rdd处理数据方法——学习记录

python黑马程序员 """ 文件&#xff0c;按JSON字符串存储 1. 城市按销售额排名 2. 全部城市有哪些商品类别在售卖 3. 上海市有哪些商品类别在售卖 """ from pyspark import SparkConf, SparkContext import os import jsonos.environ[PYSPARK_P…...

C语言入门教程100讲(0)从了解C语言的发展史开始

文章目录 引言1. C语言的起源2. C语言的诞生3. C语言的标准化4. C语言的进一步发展5. C语言的影响与应用6. C语言的未来结语引言 C语言作为一种高效、灵活且具有广泛应用的编程语言,在计算机科学史上占据着举足轻重的地位。它的设计不仅影响了后来的编程语言,也对操作系统、…...

【HTML 基础教程】HTML <head>

HTML <head> 查看在线实例 - 定义了HTML文档的标题"><title> - 定义了HTML文档的标题 使用 <title> 标签定义HTML文档的标题 - 定义了所有链接的URL"><base> - 定义了所有链接的URL 使用 <base> 定义页面中所有链接默认的链接目…...

练习题:111

目录 Python题目 题目 题目分析 需求理解 关键知识点 实现思路分析 代码实现 代码解释 指定文件路径和名称&#xff1a; 定义要写入的内容&#xff1a; 打开文件并写入内容&#xff1a; 异常处理&#xff1a; 输出提示信息&#xff1a; 运行思路 结束语 Python题…...

混合知识表示系统框架python示例

前文我们已经深入学习了框架表示法、产生式规则和一阶谓词逻辑,并对它们进行了深度对比,发现它们在不同的应用场景下各有优缺点。 一阶谓词逻辑适合复杂逻辑推理场景,具有数学定理证明、形式化系统规范的优点;产生式规则适合动态决策系统,支持实时决策(如风控、诊断),规…...

信号集操作函数

目录 一、sigpending函数 功能&#xff1a; 头文件&#xff1a; 函数原型&#xff1a; 函数参数&#xff1a; 返回值&#xff1a; 二、sigemptyset函数 功能&#xff1a; 原型&#xff1a; 参数&#xff1a; 返回值&#xff1a; 三、sigfillset函数 功能&#xf…...

学习不同电脑cpu分类及选购指南

关于电脑cpu 一、CPU型号的核心组成与命名规则Intel命名规则:AMD命名规则:5. 后缀:Intel常见后缀及其含义:AMD后缀一些常见的后缀及其含义:二、主流品牌CPU的分类与性能差异三、区分CPU型号的实用方法四、主流品牌CPU对比与选择建议五、选购CPU的注意事项关于不同主流CPU的…...

MATLAB 控制系统设计与仿真 - 30

用极点配置设计伺服系统 方法2-反馈修正 如果我们想只用前馈校正输入&#xff0c;从而达到伺服控制的效果&#xff0c;我们需要很精确的知道系统的参数模型&#xff0c;否则系统输出仍然具有较大的静态误差。 但是如果我们在误差比较器和系统的前馈通道之间插入一个积分器&a…...

Baklib知识中台驱动智能架构升级

构建四库体系驱动架构升级 在数字化转型过程中&#xff0c;企业普遍面临知识资源分散、隐性经验难以沉淀的痛点。Baklib通过构建知识库、案例库、流程库及资源库四层核心体系&#xff0c;为知识中台搭建起结构化基础框架。知识库以AI分类引擎实现文档标签化存储&#xff0c;案…...

IP第一次笔记

一、TCP协议 第0步&#xff1a;如果浏览器和host文件存在域名对应的P地址记录关系 则直接封装HTTP数据报文&#xff0c;如果没有记录则触发DNS解析获 取目标域名对应的P地址 第一步&#xff1a;终端主机想服务器发起TCP三次握手 1.TCP的三次握手 2.传输网页数据 HTTP --应用层…...

计算机三级信息安全部分英文缩写

eip&#xff0c;指令寄存器&#xff0c;用于存放指向下一条将执行指令的指针&#xff0c;即返回地址栈顶指针esp基址指针寄存器EBP&#xff0c;基地址数据执行保护DEP(Data Execute Prevention)技术可以设置内存堆栈区的代码为不可执行状态&#xff0c;从而防范溢出后代码的执行…...

Supplements of My Research Proposal: My Perspectives on the RAG

To build an agent, I think there’re a lot of things that can be considered from humans. For example, how do self-learners learn things? I think 2 sources of knowledge can never be ignored: textbooks and online cources. A question then arise: how do we …...