git merge 和 git rebase

一、是什么

在使用 git 進行版本管理的項目中,當完成一個特性的開發并將其合并到 master 分支時,會有兩種方式:

git merge
git rebase

git rebase 與 git merge都有相同的作用,都是將一個分支的提交合并到另一分支上,但是在原理上卻不相同

用法上兩者也十分的簡單:

git merge
將當前分支合并到指定分支,命令用法如下:

git merge xxx

git rebase
將當前分支移植到指定分支或指定commit之上,用法如下:

git rebase -i <commit>

常見的參數有–continue,用于解決沖突之后,繼續執行rebase

git rebase --continue

二、分析

git merge
通過git merge將當前分支與xxx分支合并,產生的新的commit對象有兩個父節點

如果“指定分支”本身是當前分支的一個直接子節點,則會產生快照合并

舉個例子,bugfix分支是從master分支分叉出來的,如下所示:在這里插入圖片描述
合并 bugfix分支到master分支時,如果master分支的狀態沒有被更改過,即 bugfix分支的歷史記錄包含master分支所有的歷史記錄

所以通過把master分支的位置移動到bugfix的最新分支上,就完成合并

如果master分支的歷史記錄在創建bugfix分支后又有新的提交,如下情況:
在這里插入圖片描述
這時候使用git merge的時候,會生成一個新的提交,并且master分支的HEAD會移動到新的分支上,如下:
在這里插入圖片描述
從上面可以看到,會把兩個分支的最新快照以及二者最近的共同祖先進行三方合并,合并的結果是生成一個新的快照

git rebase
同樣,master分支的歷史記錄在創建bugfix分支后又有新的提交,如下情況:
在這里插入圖片描述
通過git rebase,會變成如下情況:
在這里插入圖片描述
在移交過程中,如果發生沖突,需要修改各自的沖突,如下:
在這里插入圖片描述
rebase之后,master的HEAD位置不變。因此,要合并master分支和bugfix分支
在這里插入圖片描述
從上面可以看到,rebase會找到不同的分支的最近共同祖先,如上圖的B

然后對比當前分支相對于該祖先的歷次提交,提取相應的修改并存為臨時文件(老的提交X和Y也沒有被銷毀,只是簡單地不能再被訪問或者使用)

然后將當前分支指向目標最新位置D, 然后將之前另存為臨時文件的修改依序應用

三、區別

從上面可以看到,merge和rebasea都是合并歷史記錄,但是各自特性不同:

merge
通過merge合并分支會新增一個merge commit,然后將兩個分支的歷史聯系起來

其實是一種非破壞性的操作,對現有分支不會以任何方式被更改,但是會導致歷史記錄相對復雜

rebase
rebase 會將整個分支移動到另一個分支上,有效地整合了所有分支上的提交

主要的好處是歷史記錄更加清晰,是在原有提交的基礎上將差異內容反映進去,消除了 git merge所需的不必要的合并提交

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/161896.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/161896.shtml
英文地址,請注明出處:http://en.pswp.cn/news/161896.shtml

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

相關文章

模版模式 設計模式

設計模式 總目錄 https://preparedata.blog.csdn.net/article/details/134512591 文章目錄 設計模式 總目錄一、案例二、抽象類模版 AbstractOrderTemplate&#xff08;頂層的訂單抽象類&#xff09;三、執行模版的實現類3.1 默認執行模版 DefaultOrder3.2 其他執行模版 Simlp…

19.悲觀鎖與樂觀鎖解析

1.悲觀鎖 悲觀鎖比較悲觀&#xff0c;它認為如果不鎖住這個資源&#xff0c;別的線程就會來爭搶&#xff0c;就會造成數據結果錯誤&#xff0c;所以悲觀鎖為了確保結果的正確性&#xff0c;會在每次獲取并修改數據時&#xff0c;都把數據鎖住&#xff0c;讓其他線程無法訪問該…

2023年亞太地區數學建模大賽 問題B

玻璃溫室中的微氣候法規 溫室作物的產量受到各種氣候因素的影響&#xff0c;包括溫度、濕度和風速[1]。其中&#xff0c;適宜的溫度和風速是植物生長[2]的關鍵。為了調節玻璃溫室內的溫度、風速等氣候因素&#xff0c;溫室的設計通常采用帶有溫室風扇的通風系統&#xff0c;如…

docker報錯

安裝 docker報錯&#xff1a; Docker Desktop requires the Server service to be enabled. 解決方法&#xff1a; 管理員身份打開cmd&#xff0c;輸入&#xff1a; services.msc開啟 server 服務。 docker啟動報錯&#xff1a; 打開 docker 界面報錯&#xff1a; Docke…

rabbit MQ的延遲隊列處理模型示例(基于SpringBoot延時插件實現)

rabbitMQ安裝插件rabbitmq-delayed-message-exchange 交換機由此type 表示組件安裝成功 生產者發送消息時設置延遲值 消息在交換機滯納至指定延遲后&#xff0c;進入隊列&#xff0c;被消費者消費。 組件注解類&#xff1a; package com.esint.configs;import org.springfra…

OpenAI再次與Altman談判;ChatGPT Voice正式上線

11月22日&#xff0c;金融時報消息&#xff0c;OpenAI迫于超過700名員工聯名信的壓力&#xff0c;再次啟動了與Sam Altman的談判&#xff0c;希望他回歸董事會。 在Sam確定加入微軟后&#xff0c;OpenAI超700名員工簽署了一封聯名信&#xff0c;要求Sam和Greg Brockman&#x…

Java檢測網絡是否正常通訊

Java是一種流行的編程語言&#xff0c;可以用于開發網絡應用程序。在網絡應用程序中&#xff0c;檢測IP地址和端口是否通常是必要的。本文將介紹如何使用Java檢測IP和端口。 Java檢測IP和端口的方法非常簡單。我們可以使用Java的Socket類來實現。下面的代碼片段演示了如何檢測…

用于 syslog 收集的協議:TCP、UDP、RELP

系統日志是從 Linux/Unix 設備和其他網絡設備&#xff08;如交換機、路由器和防火墻&#xff09;生成的日志 可以通過將 syslog 聚合到稱為 syslog 服務器、syslog 守護程序或 syslogd 的服務器來集中 syslog。在TCP、UDP和RELP協議的幫助下&#xff0c;系統日志從設備傳輸到系…

「快學Docker」監控和日志記錄容器的健康和性能

「快學Docker」監控和日志記錄容器的健康和性能 1. 容器健康狀態監控2. 性能監控3. 日志記錄幾種采集架構圖 4. 監控工具和平臺cAdvisor&#xff08;Container Advisor&#xff09;PrometheusGrafana 5. 自動化運維 1. 容器健康狀態監控 方法1&#xff1a;需要實時監測容器的運…

Zero-Shot Restoration of Back-lit Images Using Deep Internal Learning

ABSTRACT 如何恢復背光圖像仍然是一項具有挑戰性的任務。該領域最先進的方法基于監督學習&#xff0c;因此通常僅限于特定的訓練數據。在本文中&#xff0c;我們提出了一種用于背光圖像恢復的“零樣本”方案&#xff0c;該方案利用深度學習的力量&#xff0c;但不依賴于任何先…

孟德爾隨機化 MR入門基礎-簡明教程-工具變量-暴露

孟德爾隨機化&#xff08;MR&#xff09;入門介紹和分章分享&#xff08;暫時不解讀&#xff09; 大家好&#xff0c;孟德爾隨機化大火&#xff0c;但是什么是孟德爾隨機化&#xff0c;具體怎么實操呢 這沒有其他教程的繁冗&#xff0c;我這篇講最基礎的孟德爾隨機化的核心步…

Selenium瀏覽器自動化測試框架

介紹 Selenium [1] 是一個用于Web應用程序測試的工具。Selenium測試直接運行在瀏覽器中&#xff0c;就像真正的用戶在操作一樣。支持的瀏覽器包括IE&#xff08;7, 8, 9, 10, 11&#xff09;&#xff0c;Mozilla Firefox&#xff0c;Safari&#xff0c;Google Chrome&#xff…

STM32_3(GPIO)

GPIO簡介 GPIO&#xff08;General Purpose Input Output&#xff09;通用輸入輸出口8種輸入輸出模式輸出模式可控制端口輸出高電平&#xff0c;驅動LED、蜂鳴器、模擬通信協議輸出時許等輸入模式可讀取端口的高低電平或電壓&#xff0c;用于讀取按鍵輸入、外接模塊電平信號輸…

【VRTK】【VR開發】【Unity】8-可交互對象

【概述】 之前我們只是用了一個簡單方塊作為可交互對象。其實可交互對象可以有許多細節設置,包括具體抓握物體的哪個點,指定抓握的方向,指定Secondary Action允許兩手互換抓握,雙手抓握,用兩手改變物體大小等。 【拾取物體】 要讓一個物體能夠被拾取,必須設置它為可互…

mysql解壓版安裝步驟linux

1. MySQL下載就不說了&#xff0c;以5.7版本舉例 2. 解壓安裝包 tar -zxvf mysql-5.7.41-linux-glibc2.12-x86_64.tar.gz 3. 重命名目錄 mv mysql-5.7.41-linux-glibc2.12-x86_64 /usr/local/mysql 4. 創建mysql用戶組和用戶 groupadd mysql useradd -r -g mysql mysql …

十多位老鐵在公司搭建好了測試平臺

保守估計&#xff0c;目前有十多位小伙伴在公司搭建好了。 現在稍微詳細的講一下其中測試計劃的使用說明&#xff1a; &#xff08;圖片有點小&#xff0c;可以點擊擴大查看&#xff09; 1、進入測試計劃模塊&#xff0c;點擊“添加”&#xff0c;如下圖5.1&#xff1a; ▲圖 5…

NX二次開發UF_CAM_set_cam_preferences 函數介紹

文章作者&#xff1a;里海 來源網站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan UF_CAM_set_cam_preferences Defined in: uf_cam.h int UF_CAM_set_cam_preferences(UF_CAM_preferences_p_t prefs ) overview 概述 This function sets the current settings of…

PTA-6-44 水果接口-工廠設計模式

用工廠設計模式編寫程序代碼。已知有如下Fruit接口&#xff0c;請編寫其子類Apple類與Orange類&#xff0c;另外再編寫一個Factory工廠類&#xff0c;具體要求如下。 需要編寫Fruit接口的子類&#xff1a; 兩個子類Apple和Orange&#xff0c;實現接口Fruit&#xff0c;并覆寫ea…

若依框架導出下載pdf/excel以及導入打印等

一、打印文件 // 報表打印 handlePdf(row) {wayAPI(row.billcode).then((res) > {var binaryData [];binaryData.push(res);let url window.URL.createObjectURL(new Blob(binaryData, {type: "application/pdf"})); window.open("/static/pdf/web/v…

【鴻蒙應用ArkTS開發系列】- 云開發入門實戰二 實現城市多級聯動Demo(上)

目錄 概述 云數據庫開發 一、創建云數據庫的對象類型。 二、預置數據&#xff08;為對象類型添加數據條目&#xff09;。 三、部署云數據庫 云函數實現業務邏輯 一、創建云函數 二、云函數目錄講解 三、創建resources目錄 四、獲取云端憑據 五、導出之前創建的元數據…