圖片解釋git的底層工作原理

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? (圖片來源:自己畫的)

基于同一個commit創建新分支

(圖片來源:書籍《Linux運維之道》 ISBN 9787121461811)

在新分支上修改然后commit一次

??????????????????????????????? (圖片來源:書籍《Linux運維之道》 ISBN 9787121461811)

在舊分支上也修改并commit一次

?????????????????????????? (圖片來源:書籍《Linux運維之道》 ISBN 9787121461811)

1. blob是binary large object,二進制大對象,是git管理的數據的底層實際存儲形式,也就是里面是一串各種0和1

2. tree是一個對象,這個對象是一個樹索引,這個索引是在git commit的時候生成的。之所以不同的commit代表不同的版本,其底層是不同的commit哈希值指向的是不同的tree對象,tree對象包含目錄和文件的結構,以及每個文件底層指向的是哪個blob

?3. 如果一個git數據倉庫只有一個branch,比如創建git數據倉庫時,會默認自帶一個main分支,每次的commit,都是由這個branch指向的。關鍵點是,commit是branch的底層,而不是branch是commit的底層。

?4. 本來每次的commit都只有一個branch,比如main,指向這個commit的,如果基于這個main branch創建出來一個新的branch,實際上是基于這個main branch所指向的commit創建出來一個新的branch,比如release,這時這兩個branch都是指向同一個commit的。然后在release分支上再commit,這時release分支就指向新的commit了,這時main分支還是指向原來的commit的,如果把HEAD checkout到main分支了,再commit一次,那么這個新的commit也是基于原來的commit的,所以看著就是main分支和release分支分岔了。這就是不同的分支所代表的含義,不同的分支,只不過是從同一個commit開始,在不同的分支的指向下,不同的commit被不同的分支名稱區別化了,等于基于同一個commit開始,然后第二個commit被release分支跟蹤了,第三個commit還是被main分支跟蹤著,然后基于第二個commit之后的commit繼續被release分支跟蹤著,基于第三個commit之后的commit都被main分支跟蹤著。這么來看,其實分支就是一個指針。不同的分支是不同的指針指向不同的commit的持續變化。

?5. 而HEAD就是指向分支這個指針的指針,當把HEAD移動到某個分支指針時,這時候看到的就是這個分支指針所指向的commit

6. 一般的HEAD指針時指向不同分支指針的,比如HEAD_1和HEAD_2,但是也可以像HEAD_3一樣,這個指針的指針直接指向commit了,而不先指向分支再通過分支的指針指向commit,這種叫detached HEAD分離指針,這樣的作用是可以訪問這個commit(通過這個commit的哈希值),查看這個commit的狀態,也可以指向這個commit之后,基于這個commit再創建一個分支指針出來,然后在這個分支上開發,比如branch_c

?7. HEAD_4和branch_d也是同樣的理論,區別是,這個commit_2打了一個TAG,這個TAG是給commit_2貼的一個標簽,方便人類識別,可以通過這個TAG來訪問這個commit_2,打TAG的目的是,在很多的commit中,每一個commit都是用哈希值代表的,人們在工作中,不容易通過hash值和當時commit的msg來確定這個commit是干嘛的,所以對于重要的commit,可以打一個或多個TAG來指定這個commit是干嘛的。比如v2.15.3-rc0,代表這個tag是一個版本的發行候選版第一版,通過TAG的名稱方便找到這個commit,如果需要,也可以基于這個TAG,也就是這個commit來檢出進行使用,比如打部署包。如果需要在這個TAG所代表的commit的基礎上進行再次開發,也可以基于這個TAG所代表的commit來創建一個新的分支,然后在這個新的分支上進行開發和維護。

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

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

相關文章

leetcode994.腐爛的橘子

思路源自 【力扣hot100】【LeetCode 994】腐爛的橘子|多源BFS 這里圖中的腐爛的的橘子是同時對周圍進行腐化,所以采用多源bfs就能解決 多源bfs與單源bfs的區別就在于隊列取出時一輪是取出隊列當中的全部元素 class Solution {public int orangesRotti…

【華為OD技術面試真題 - 技術面】- Java面試題(15)

華為OD面試真題精選 專欄:華為OD面試真題精選 目錄: 2024華為OD面試手撕代碼真題目錄以及八股文真題目錄 介紹下TCP/UDP TCP(傳輸控制協議)和 UDP(用戶數據報協議) TCP(Transmission Control Protocol)和 UDP(User Datagram Protocol)是兩種常見的傳輸層協議,主要…

?在 Fedora 系統下備份遠程 Windows SQL Server 數據庫的完整方案

?一、環境準備與工具安裝? ?1. 安裝 Microsoft SQL Server 命令行工具? Fedora 需安裝 mssql-tools 和 ODBC 驅動: # 添加 Microsoft 倉庫 sudo curl -o /etc/yum.repos.d/msprod.repo https://packages.microsoft.com/config/rhel/8/prod.repo# 安裝工具包 …

DeepSeek:巧用前沿AI技術,開啟智能未來新篇章

引言 近年來,人工智能(AI)技術迅猛發展,大模型成為全球科技競爭的核心賽道。在這場AI革命中,DeepSeek作為中國領先的大模型研發團隊,憑借其創新的技術架構、高效的訓練方法和廣泛的應用場景,迅…

R語言實現軌跡分析--traj和lcmm包體會

R語言實現軌跡分析–traj和lcmm包體會 軌跡分析是對重復測量數據的一種歸納,轉化為一種分類變量,比如手術后1~7天內的疼痛評分,可以形成術后急性痛軌跡。形成的軌跡作為一個分類變量,可以用于預測疾病的預后&#xff…

Vue 3 事件總線詳解:構建組件間高效通信的橋梁

Vue 3 事件總線詳解:構建組件間高效通信的橋梁 為什么需要事件總線?使用 mitt 實現事件總線1. 安裝 mitt2. 創建事件總線3. 在組件中使用事件總線發送端組件(例如 ComponentA.vue)接收端組件(例如 ComponentB.vue&…

MySQL的基礎語法1(增刪改查、DDL、DML、DQL和DCL)

目錄 一、基本介紹 二、SQL通用語法 三、SQL分類(DDL、DML、DQL、DCL) 1.DDL 1.1數據庫操作 1.2表操作 1.2.1表操作-查詢創建 1.2.2表操作-數據類型 1)數值類型 2)字符串類型 3)日期時間類型?編輯 4)表操作-案例 1.2.3…

【NLP】15. NLP推理方法詳解 --- 動態規劃:序列標注,語法解析,共同指代

動態規劃 (Dynamic Programming) 動態規劃(Dynamic Programming,簡稱 DP)是一種通過將問題分解為較小子問題來優化計算效率的技術。它特別適用于優化最優解問題,比如序列標注(sequence tagging)這類任務。…

JavaScript中的NaN、undefined和null 的區別

NaN代表"Not a Number",它是一種特殊的數值,用于表示非數字值。當一個操作無法返回有效的數值時,通常會得到NaN作為結果。 let result = 10 / abc; console.log(result); // 輸出 NaN需要注意的是,NaN與自身不相等,我們無法通過簡單的比較操作符(如==或===)來…

Turtle事件處理(鍵盤與鼠標交互)

Turtle 提供了 事件驅動編程,允許我們使用 鍵盤 和 鼠標 控制 Turtle,從而實現交互式繪圖。例如,我們可以讓 Turtle 響應 按鍵、鼠標點擊 和 拖動 事件,使其根據用戶的輸入進行移動、旋轉或繪制圖形。 1. 事件機制概述 Turtle 的事件處理主要依賴 turtle.Screen() 提供的 …

【Keepalived】Keepalived-2.3.3明確結束對CentOS 7的支持

2025年3月30日,官方發布了Keepalived的最新版,版本號:2.3.3 而2024年11月3日發布的2.3.2版本,在CentOS 7.9上編譯的時候,就出現了報錯,但是在Alma Linux 8.10上,則可以成功編譯安裝&#xff0c…

PyTorch --torch.cat張量拼接原理

在 PyTorch 的 torch.cat 函數中,out 參數用于指定輸出張量的存儲位置。是否使用 out 參數直接影響結果的存儲方式和張量的內存行為。以下是詳細解釋: 不使用 out 參數(默認行為) 含義:不提供 out 參數時,…

人工智能之數學基礎:矩陣對角化的本質

本文重點 前面的課程中,我們學習了矩陣的對角化,基于對角化可以將矩陣A轉變為對角矩陣D,但是你有沒有想過,為什么要進行矩陣對角化,矩陣對角化究竟做了一件什么事情呢? 矩陣對角化的本質 幾何解釋: 從幾何變換的角度看,矩陣對角化意味著我們找到了一組基,使得線性變…

ubuntu的ubuntu--vg-ubuntu--lv磁盤擴容

在我們安裝ubuntu時,如果選擇的是自動分區,就會按照邏輯卷的形式來分區,并且只分配100G其余的并不會被分配,這對我們大多數情況來說都是不合理的,所以,如何擴充呢 下面以一個小的案例來說明如何擴充 問題…

Redis BitMap 實現簽到及連續簽到統計

一、引言 用戶簽到功能是很多應用都離不開的一個板塊,單詞打開、QQ達人等等為我們所熟知,這項功能該如何實現呢,一些朋友可能想當然的覺得無非將每日的簽到數據記錄下來不就好了,不會去細想用誰記錄,如何記錄才合適。 …

前端國際化-插件模式

文章目錄 Webpack 插件開發解析中文調用有道翻譯 API生成 JSON 語言文件React 國際化實現 Webpack 插件開發 創建 i18n-webpack-plugin.js 插件:在 src 目錄下掃描所有文件使用 babel-parser 解析 JavaScript/JSX 代碼識別中文文本通過有道翻譯 API 翻譯生成 local…

IP屬地和發作品的地址不一樣嗎

在當今這個數字化時代,互聯網已經成為人們日常生活不可或缺的一部分。隨著各大社交平臺功能的不斷完善,一個新功能——IP屬地顯示,逐漸走進大眾視野。這一功能在微博、抖音、快手等各大平臺上得到廣泛應用,旨在幫助公眾識別虛假信…

PP-ChatOCRv3新升級:多頁PDF信息抽取支持自定義提示詞工程,拓展大語言模型功能邊界

文本圖像信息抽取技術在自動化辦公、建筑工程、教育科研、金融風控、醫療健康等行業領域具有廣泛應用場景。2024年9月,飛槳低代碼開發工具PaddleX中新增文本圖像智能產線PP-ChatOCRv3,充分結合PaddleOCR的文本圖像版面解析能力和文心一言語言理解優勢&am…

算法刷題記錄——LeetCode篇(1.2) [第11~20題](持續更新)

更新時間:2025-03-29 LeetCode題解專欄:實戰算法解題 (專欄)技術博客總目錄:計算機技術系列目錄頁 優先整理熱門100及面試150,不定期持續更新,歡迎關注! 17. 電話號碼的字母組合 給定一個僅包含數字 2-9…

如何在 vue 渲染百萬行數據,vxe-table 渲染百萬行數據性能對比,超大量百萬級表格渲染

vxe-table 渲染百萬行數據性能對比,超大量百萬級表格渲染;如何在 vue 渲染百萬行數據;當在開發項目時,遇到需要流暢支持百萬級數據的表格時, vxe-table 就可以非常合適了,不僅支持強大的功能,虛…