Git分支(branch)詳細講解


git分支

正常情況下,如果想要一個脫離主線的分支來開發項目,常常需要完全創建一個源代碼目錄的副本,對大項目來說,這樣的過程會耗費很多時間,所以這是一個比較低效的做法。但是git分支則不同,你會發現使用分支和合並分支是非常方便的。

git分支簡介

首先要知道git保存數據不是保存的文件的差異或變化,而是一系列不同時刻的文件快照。
在進行提交操作時,Git會保存一個提交對象(blob對象),該提交對象會包含一個指向暫存內容快照的指針,還包含作者的姓名,郵箱和提交時輸入的信息以及指向它父對象的指針,首次提交時提交對象沒有父對象,普通提交產生的提交對象有一個父對象,而由多個分支合並產生的提交對象 會有多個父對象。

這里舉一個例子,假設現在工作目錄中有三個將要被暫存和提交的文件,當使用git commit進行提交操作時,git會先計算每個子目錄的校驗和,然后在git倉庫中為這些校驗和保存為樹對象,隨后Git便會創建一個提交對象,它除了上面提到的那些信息外,還包含指向這個樹對象的指針。現在倉庫中有五個對象:三個blob對象(保存着文件快照)一個樹對象(記錄着目錄結構和blob對象 索引)以及一個提交對象(包含着指向前述樹對象的指針和所有提交信息)

當做些修改后再提交,那么產生的提交對象會包含一個指向上次提交對象(父對象)的指針。

git 中默認分支的名字是master,而origin是Git給克隆的倉庫服務器的默認名字。

分支創建

如果要創建一個新的分支testing,則需要使用命令:git branch testing,但是如何知道當前是在哪一個分支上的呢?也很簡單,git中有一個名為HEAD的特殊指針,它會指向當前所在的分支。可以使用git log命令查看當前各個分支當前所指的對象。

可以看到當前是在master分支上,mastertesting指針均指向b6fd293的分支上。

分支切換

git checkout testing同時在當前目錄下新建Test9.md,並提交。可以看到:

這時候再切換回master分支git checkout master可以看見目錄中沒有Test9.md了,這條命令做了兩件事,第一是將HEAD指回master分支,二是將工作目錄中的內容恢復成master分支所指向的快照內容。

這個時候再修改Test8.md的內容之后提交。

當使用命令git log --oneline --graph --all可以看到提交歷史和各個分支的指向。

注意:如果想要新建一個分支並同時切換到那個分支上可以運行一個帶有-b選項的git checkout命令

刪除分支

使用git branch -d可以刪除一個分支,這里刪除剛剛創建的testing2分支

合並分支

使用git merge命令來合並兩個分支,首先切換到master分支中,然后使用命令git merge testing會彈出類似於提交信息文本,用vim語法編輯然后退出。

然后查看分支的詳細情況會發現合並的過程其實是創建了一個新的快照,並且將兩個分支末端的快照合並到新快照中且自動創建了一個新的提交指向新的快照。這被稱作一個合並提交,它的特別之處是他不止有一個父提交。

(下圖中C6表示是新的快照,C4和C5合並為C6)

git branch的其他用法(分支管理)

git branch如果不加任何命令運行,則會顯示當前所有分支的一個列表

git branch -v可以查看每一個分支的最后一次提交

git branch --mergedgit branch --no-merged
建立新的分支testing2,並且在當前目錄中建立新的文件夾“Testing2”里面添加新文件“testing2.md”,並且提交。查看當前git的狀態:

這時候使用git branch --merged可以看到已經合並到當前分支的分支列表:

在這個列表中沒有*的分支通常可以從刪除掉,而--no-merged參數列表中的分支當嘗試刪除會報錯。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM