深入理解 `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.pswp.cn/pingmian/74167.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/74167.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/74167.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Matlab_Simulink中導入CSV數據與仿真實現方法

前言 在Simulink仿真中&#xff0c;常需將外部數據&#xff08;如CSV文件或MATLAB工作空間變量&#xff09;作為輸入信號驅動模型。本文介紹如何高效導入CSV數據至MATLAB工作空間&#xff0c;并通過From Workspace模塊實現數據到Simulink的精確傳輸&#xff0c;適用于運動控制…

Spring Boot 中 JdbcTemplate 處理枚舉類型轉換 和 減少數據庫連接的方法 的詳細說明,包含代碼示例和關鍵要點

以下是 Spring Boot 中 JdbcTemplate 處理枚舉類型轉換 和 減少數據庫連接的方法 的詳細說明&#xff0c;包含代碼示例和關鍵要點&#xff1a; 一、JdbcTemplate 處理枚舉類型轉換 1. 場景說明 假設數據庫存儲的是枚舉的 String 或 int 值&#xff0c;但 Java 實體類使用 enu…

API 安全之認證鑒權

作者&#xff1a;半天 前言 API 作為企業的重要數字資源&#xff0c;在給企業帶來巨大便利的同時也帶來了新的安全問題&#xff0c;一旦被攻擊可能導致數據泄漏重大安全問題&#xff0c;從而給企業的業務發展帶來極大的安全風險。正是在這樣的背景下&#xff0c;OpenAPI 規范…

MATLAB繪圖配色包說明

本欄目將分享MATLAB數據分析圖表&#xff0c;該貼講述配色包的使用 將配色包colormap_nclCM文件夾添加到路徑close all&#xff08;盡量不要刪&#xff09;&#xff0c;使用map colormap(nclCM(309))時會多出來一張空白圖片。配色資源來自slandarer&#xff1b;找不到合適顏色…

Oracle 數據庫系統全面詳解

Oracle 數據庫是全球領先的關系型數據庫管理系統(RDBMS)&#xff0c;由 Oracle 公司開發。它為企業級應用提供了高性能、高可用性、安全性和可擴展性的數據管理解決方案。 目錄 一、Oracle 數據庫體系結構 1. 物理存儲結構 主要組件&#xff1a; 存儲層次&#xff1a; 2. …

Flink介紹——發展歷史

引入 我們整個大數據處理里面的計算模式主要可以分為以下四種&#xff1a; 批量計算&#xff08;batch computing&#xff09; MapReduce Hive Spark Flink pig流式計算&#xff08;stream computing&#xff09; Storm SparkStreaming/StructuredStreaming Flink Samza交互計…

在MFC中使用Qt(四):使用屬性表(Property Sheet)實現自動化Qt編譯流程

前言 首先回顧下前面文章介紹的&#xff1a; 在MFC中使用Qt&#xff08;一&#xff09;&#xff1a;玩膩了MFC&#xff0c;試試在MFC中使用Qt&#xff01;&#xff08;手動配置編譯Qt&#xff09; 在MFC中使用Qt&#xff08;二&#xff09;&#xff1a;實現Qt文件的自動編譯流…

Go紅隊開發— 收官工具

文章目錄 免責聲明個人武器開發美觀輸出Whois查詢反查ip目錄掃描子域名爆破被動掃描主動掃描(字典爆破)CDN檢測 免責聲明 &#x1f4a1; 本博客絕不涉及任何非法用途。 &#x1f4a1; 使用者風險自擔&#xff0c;違規后果自負。 &#x1f4a1; 守法為先&#xff0c;技術向善。 …

論文閱讀《P?roximal Curriculum for Reinforcement Learning Agents》——提升智能體學習速度的

老規矩&#xff0c;今天是使用Gemini2.5pro來生成的模板 這篇論文研究了如何為處理多個相關任務的強化學習智能體自動設計學習課程&#xff08;即任務順序&#xff09;&#xff0c;以加速訓練過程&#xff0c;并解決現有方法需要大量調參或缺乏理論依據的問題。為此&#xff0…

【面試題】在 CSS 中,實現一個 div 中的子 div 水平垂直居中

1. 使用 Flexbox 特點&#xff1a;簡單、直觀&#xff0c;現代瀏覽器支持良好。 代碼&#xff1a; css .parent {display: flex;justify-content: center; /* 水平居中 */align-items: center; /* 垂直居中 */height: 200px; /* 父容器需有高度 */ } .child {…

基于SpringBoot的失物招領平臺(源碼+數據庫)

476基于SpringBoot的失物招領平臺&#xff0c;有用戶和管理員兩個角色&#xff0c;主要功能如下 失物招領系統功能介紹如下&#xff1a; 1. 用戶功能&#xff1a; - 發布失物公告&#xff1a;用戶可以發布自己的失物信息 - 失物分類&#xff1a;用戶可以根據失物的類型進行分類…

PyQt6實例_批量下載pdf工具_批量pdf網址獲取

目錄 前置&#xff1a; 步驟&#xff1a; step one 安裝包 step two 獲取股票代碼 step three 敲代碼&#xff0c;實現 step four 網址轉pdf網址 視頻 前置&#xff1a; 1 本系列將以 “PyQt6實例_批量下載pdf工具”開頭&#xff0c;放在 【PyQt6實例】 專欄 2 本節講…

量子退火與機器學習(2):少量實驗即可找到新材料,黑盒優化?量子退火

使用量子退火和因子分解機設計新材料 這篇文章是東京大學的一位博士生的畢業論文中的主要貢獻。 結合了黑盒優化和量子退火&#xff0c;是融合的非常好的一篇文章&#xff0c;在此分享給大家。 https://journals.aps.org/prresearch/abstract/10.1103/PhysRevResearch.2.0133…

從零開始:Makefile 與 CMake 的基礎入門與實踐

本文適合基礎學者 零基礎 makefile 定義&#xff1a;Makefile 是一種傳統的構建工具&#xff0c;用于定義如何編譯和鏈接源代碼。它通過一系列規則來描述如何生成目標文件&#xff08;如可執行文件或庫&#xff09;。 功能&#xff1a;定義編譯規則&#xff08;如如何從源文件…

android開啟Sys V IPC,并使用共享內存編程

參考&#xff1a;安卓開啟Sys V IPC&#xff0c;并使用共享內存編程 | 久奈浜的CS部 刪除config中-# CONFIG_SYSVIPC is not set 在rk3576.config中增加CONFIG_SYSVIPCy CONFIG_SYSVIPCy CONFIG_SYSVIPC_SYSCTLy CONFIG_SYSVIPC_COMPATy CONFIG_IPC_NSy system/sepolicy/pre…

docker pull lss233/one-api:latest 在哪里運行,作用是什么

docker pull lss233/one-api:latest 在哪里運行,作用是什么 1. 在哪里運行? docker pull lss233/one-api:latest 是一個Docker命令,需在已安裝Docker的環境中執行。 適用環境:本地開發機、服務器、云主機等。前提條件:需先安裝Docker并配置好環境。2. 作用是什么? 該命令…

輪胎廠相關筆記

一、術語 圖解&#xff1a;https://news.yiche.com/hao/wenzhang/38498703/ 1、胚胎 在輪胎制造行業中&#xff0c;“胎胚”&#xff08;也稱“生胎”或“未硫化輪胎”&#xff09;是指輪胎在硫化&#xff08;高溫高壓固化&#xff09;之前的半成品形態。它是輪胎成型的中間…

開發者視角:應用程序中HTTP代理的集成指南

目錄 一、為何需要HTTP代理&#xff1f; 二、集成方式分階解析 三、關鍵配置管理策略 四、安全與性能平衡 五、調試與問題排查 六、最佳實踐總結 結語 在開發需要與外部網絡交互的應用程序時&#xff0c;HTTP代理是繞不開的實用工具。它既能解決網絡限制問題&#xff0c…

從紙質到 AI 時代:我的筆記工具探索之旅

今天清晨&#xff0c;在得到上閑逛時&#xff0c;偶然間發現了一本名為《筆記的方法》的書&#xff0c;這本由Flomo的作者出版的圖書&#xff0c;深入探討了記筆記的藝術。 說起記筆記&#xff0c;這些年來&#xff0c;我嘗試了各種各樣的工具&#xff0c;今天就來梳理一下我的…

Ubuntu22云服務器添加2G Swap分區

Ubuntu22云服務器添加2G Swap分區 步驟 1&#xff1a;檢查當前 Swap 和內存步驟 2&#xff1a;創建 2GB 的 Swap 文件步驟 3&#xff1a;設置權限并格式化步驟 4&#xff1a;啟用 Swap 文件步驟 5&#xff1a;永久保留 Swap 配置可選優化&#xff1a;調整 Swappiness驗證結果注…