Git branch分支實質
關於如何建立分支可以參閱Git新建分支一章節。
經過若干次提交之後,分支圖示如下:
關於上圖,我們可以這樣解釋:
(1).具有一個master分支。
(2).master分支具有三個commit提交物件。
(3).C1、C2和C3都是commit提交物件,除第一個之外,其他物件都有一個或多個指向上次提交物件的指標。
解析分支本質:
分支名稱master是什麼呢,它本質上是一個可變指標,指向最後一個commit提交,隨著commit提交的變化,master的指向位置也在不斷變化。下面再新增一個提交C4,圖示如下:
我們可以形象的將master分支名稱看做一個生活中的標籤(不能等同於git中的tag),貼在了某個commit物件上,然後從這個commit物件回溯,就形成了一個完整的分支。下面新建一個issue5分支,程式碼如下:
[Shell] 純文字檢視 複製程式碼$ git branch issue5
再來檢視提交歷史,程式碼如下:
[Shell] 純文字檢視 複製程式碼$ git log --oneline
程式碼執行效果截圖如下:
可以看到在903d5af物件被兩個分支(master和issue5)指向,因為issue5是基於master分支新建的。
圖示如下:
在.git目錄下的refs/heads目錄中存放的就是當前所有分支。
圖示如下:
檢視一下其中的內容,程式碼如下:
[Shell] 純文字檢視 複製程式碼$ cat .git/refs/heads/master
程式碼執行效果截圖如下:
可以看到master檔案中儲存的是最後一次提交的sha-1值,也就是master正指向這個commit提交。
這也是為什麼Git可以瞬間建立分支,成本極低的原因,僅僅建立一個檔案,然後寫入一段字串,效率豈能低。
下面將issue5改名為newBr,程式碼如下:
[Shell] 純文字檢視 複製程式碼$ mv .git/refs/heads/issue5.git/refs/heads/newBr
程式碼執行效果截圖如下:
相關文章
- Git新建branch分支Git
- Git三大特色之Branch(分支)Git
- Git tag標籤與branch分支 區別Git
- Git tag標籤與branch分支的區別Git
- git branch不顯示本地分支的問題(二)Git
- Android Studio Git No tracked branch configured for branch branch_name or the branch doesn't existAndroidGit
- Git(12)-- Git 分支 - 分支簡介Git
- git分支Git
- git操作之四:git branch(本地倉庫)Git
- Git dev分支合併到master分支完美實戰GitdevAST
- 智慧雲分支(Cloud Smart Branch)方案正式釋出!Cloud
- git show-branch命令詳解Git
- Git 分支管理Git
- Git 分支操作Git
- Git 使用分支Git
- git分支操作Git
- 雲智慧分支(Cloud Smart Branch)方案介紹和演示Cloud
- 雲智慧分支(Cloud Smart Branch)網路運維研究Cloud運維
- Git之提示There is no tracking information for the current branch.GitORM
- Git分支的作用Git
- Git分支切換Git
- git-分支管理Git
- Git——分支管理(2)Git
- git合併分支Git
- git實用知識梳理(二)分支管理Git
- Git 分支 - 分支的新建與合併Git
- [git]git分支常用命令Git
- git刪除本地分支命令 git怎麼刪除本地分支Git
- 智慧雲分支(Cloud Smart Branch)場景和解決方案介紹Cloud
- Git刪除指定分支Git
- git檢視所有分支Git
- Git 分支操作介紹Git
- Git修改分支的名字Git
- 4、Git之分支操作Git
- Git 拉取 origin 分支Git
- 成熟的 Git 分支模型Git模型
- Git 與遠端分支Git
- 使用分支——Git Merge命令Git