深入理解 `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 中的变基和不同的拉取方式!如果觉得有帮助,欢迎点赞收藏 ⭐️!


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

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

相关文章

读一本书,骑行万里路:与维乐 Angel Rise+骑行看世界

最近读到了一本名为《自行车改变的世界&#xff1a;女性骑行的历史》的书&#xff0c;才发现原来女性的骑行自由来得并不轻易&#xff0c;激励着每一位女性勇敢地踏上骑行之路。而我一直在使用的维乐坐垫品牌&#xff0c;除了产品专业之外&#xff0c;也一直都非常关注女性骑行…

数据结构 KMP 字符串匹配算法

KMP算法是计算机科学中的一种字符串匹配算法&#xff0c;KMP是三个创始人名字首字母 题目 AcWing - 算法基础课 前置知识点 KMP算法是一种高效的字符串匹配算法&#xff0c;算法名称取自于三位共同发明人名字的首字母组合。该算法的主要使用场景就是在字符串&#xff08;也叫…

06.AI搭建preparationの(transformers02)bertmodel实现bert-base-chinese的编码

一、下载 google-bert/bert-base-chinese at main 二、简介&#xff1a; 该模型的主要作用是获取每个汉字的向量表示&#xff0c;后续通过微调可应用于各种简体和繁体中文任务。 三、环境与设备&#xff1a; pycharm:2024 torch:2.2.0cu118 tensorflow2.6.0 python:3.9 tran…

JavaScript创建时间对象、数字、字符串方法

时间对象 四种时间创建方法 // 普通创建 var myData new Date(); console.log(myData);// 传参创建 年月日 时分秒 毫秒 var myData1 new Date(2019,10,1,9,10,20,30); console.log(myData1);// 字符串创建 年月日 时分秒 毫秒 var myData2 new Date("2019/10/1 9:10…

时序数据库:InfluxDB命令行操作

学习 InfluxDB 的命令行操作至关重要&#xff0c;它不仅是与数据库直接交互的工具&#xff0c;也是理解 InfluxDB 核心概念的关键途径。通过命令行&#xff0c;用户可以高效地执行数据库管理、数据查询和插入等任务&#xff0c;深入掌握 InfluxQL 的语法及功能。这对于调试、快…

基于MCU实现的电机转速精确控制方案:软件设计与实现

本文将详细介绍一篇基于微控制器&#xff08;MCU&#xff09;的电机转速精确控制的软件方案。通过采样PWM信号控制和ADC采样技术&#xff0c;结合PID闭环控制算法&#xff0c;实现了电机转速的高效、稳定调节。以下是软件方案流程图&#xff0c;下文将对其进行展开讲解。 原图太…

DeepSeek本地部署(linux)

一、下载并安装Ollama 1.下载Ollama Ollama官网:Ollama 点击"Download",会跳转至下载页面。 1.1在线下载安装 可复制此命令到Linux服务器进行在线下载,如下载速度过慢,可选择离线下载安装。 curl -fsSL https://ollama.com/install.sh | sh1.2离线下载安装 …

UE中不同摄像机震动的区别Camera Shake

Play World Camera Shake 和 Start Camera Shake 都用于触发摄像机震动效果&#xff0c;但它们的适用场景和实现方式有所不同。 1. Play World Camera Shake 功能&#xff1a; 在 世界中的某个位置 触发摄像机震动&#xff0c;震动效果会根据 摄像机与目标位置的距离 产生衰减&…

操作系统——线程的概念和特点

什么是线程&#xff0c;为什么要引入线程&#xff1f; 在很久以前&#xff0c;还没有引入进程&#xff0c;系统中各个程序只能串行执行 所以在那个时候&#xff0c;我们想一边运行音乐&#xff0c;一边运行QQ&#xff0c;显然是不可以实现的&#xff0c;在那个时候我们不可能…

大模型架构记录13【hr agent】

一 Function calling 函数调用 from dotenv import load_dotenv, find_dotenvload_dotenv(find_dotenv())from openai import OpenAI import jsonclient OpenAI()# Example dummy function hard coded to return the same weather # In production, this could be your back…

mysql5.7无法启动报错处理无日志

注意&#xff0c;本篇适用于mysql安装启动异常&#xff0c;而不是数据库本身的异常。所以在/var/log/mysql/下没有日志。 journalctl -u mysqld -n 15 查看启动日志&#xff0c;提示缺少共享库libaio.so.1 Mar 26 16:47:01 iZbp19v3umnf1z4en78hnlZ systemd[1]: Starting MyS…

android11关机安卓充电的UI定制化

引言 首先上一张安卓充电的图片&#xff1a; 安卓关机状态下有两种充电模式&#xff1a;uboot-charge和android-charge&#xff0c;可通过dts配置使用哪一种充电模式。 dts配置中uboot-charge和android-charge是互斥的&#xff0c;如下配置的是开启android-charge&#xff1a;…

忘记海康网络摄像机IP

海康网络摄像机的使用&#xff1a; 海康网络摄像机的使用 解决电脑无法通过网线直连海康摄像机的问题 使用vlc显示海康网络摄像机的视频 忘记海康网络摄像机IP 一、引言 如果忘记了海康网络摄像机的IP&#xff0c;可以通过下载海康的设备网络搜索软件“SADP”解决。 二…

【CSS3】04-标准流 + 浮动 + flex布局

本文介绍浮动与flex布局。 目录 1. 标准流 2. 浮动 2.1 基本使用 特点 脱标 2.2 清除浮动 2.2.1 额外标签法 2.2.2 单伪元素法 2.2.3 双伪元素法(推荐) 2.2.4 overflow(最简单) 3. flex布局 3.1 组成 3.2 主轴与侧轴对齐方式 3.2.1 主轴 3.2.2 侧轴 3.3 修改主…

百度自动驾驶:我的学习笔记

自动驾驶新人之旅(9.0版) 第一课&#xff1a;初识自动驾驶技术 1. 自动驾驶技术概述 2. 自动驾驶人才需求与挑战 3. 如何使用Apollo学习自动驾驶[上机学习] 4. 如何使用Apollo学习自动驾驶[上车学习] 第二课&#xff1a;入门自动驾驶技术 1. Apollo车云研发流程 2. Lin…

并发编程之FutureTask.get()阻塞陷阱:深度解析线程池CPU飚高问题排查与解决方案

FutureTask.get方法阻塞陷阱&#xff1a;深度解析线程池CPU飚高问题排查与解决方法 FutureTask.get()方法阻塞陷阱&#xff1a;深度解析线程池CPU飚高问题排查与解决方法1、情景复现1.1 线程池工作原理1.2 业务场景模拟1.3 运行结果1.4 发现问题&#xff1a;线程池没有被关闭1.…

记录vite引入sass预编译报错error during build: [vite:css] [sass] Undefined variable.问题

vite.config.ts resolve: {alias: {: path.resolve(__dirname, src),},},css: {// css预处理器preprocessorOptions: {scss: {additionalData: use "/assets/styles/block.scss" as *;,}}},block.scss $colorGreen: #00ff00;index.vue :v-deep .font-size-14{colo…

代码小练习

public class Test3 {public static void main(String[] args) throws ParseException {ArrayList<Integer> listnew ArrayList<>();Scanner scnew Scanner(System.in);while (true){System.out.println("请输入一个整数");String s sc.nextLine();int…

百人会上的蔚小理与「来的刚刚好」的雷军

这就是2025百人会上的蔚小理&#xff0c;努力的李斌、宣扬飞行汽车的何小鹏与大讲开源的李想。那么小米汽车的模式是什么呢&#xff1f;站在蔚小理的肩上。 这就是2025百人会上的蔚小理&#xff0c;努力的李斌、宣扬飞行汽车的何小鹏与大讲开源的李想。那么小米汽车的模式是什么…

日程公布| 第八届地球空间大数据与云计算前沿大会与集中学习(3号通知)

日程公布| 第八届地球空间大数据与云计算前沿大会与集中学习&#xff08;3号通知&#xff09; 日程公布| 第八届地球空间大数据与云计算前沿大会与集中学习&#xff08;3号通知&#xff09;