git 從git log --graph命令輸出結果中查看版本進化大致過程以分支合併原理

git 從git log --graph命令輸出結果中查看版本進化大致過程

先說說我的操作步驟
(1)首先git init倉庫,此時HEAD指向master分支,即此時所在分支爲master分支,並在此分支下建立一個名爲myfolder的文件夾,然後提交。
(2)建立新的分支test,master和test指向同一個commit對象。
在這裏插入圖片描述
(3)在test分支下新建1.txt文件,並且提交
在這裏插入圖片描述

(4)在master分支下新建2.txt,並且提交
在這裏插入圖片描述

(5)在master分支下,合併test分支
在這裏插入圖片描述
(6)在test分支下合併master分支
在這裏插入圖片描述
(7)test 分支下新建3.txt,並且提交
在這裏插入圖片描述
(8)master分支下合併test
在這裏插入圖片描述
(9)查看提交記錄git log --graph
在這裏插入圖片描述紅色小框框代表master分支指向commit對象的變化,綠色小框框代表test分支指向commit對象的變化。
(10)分支合併原理
a.
在這裏插入圖片描述
如果 master 分支所在的提交對象是要併入的 test分支的直接上游,Git 只需把master 分支指針直接右移。換句話說,如果順着一個分支走下去可以到達另一個分支的話,那麼 Git 在合併兩者時,只會簡單地把指針右移,因爲這種單線的歷史分支不存在任何需要解決的分歧,所以這種合併過程可以稱爲快進(Fast forward)。
b.在這裏插入圖片描述
由於當前 master 分支所指向的提交對象(C4)並不是 iss53 分支的直接祖先,Git 不得不進行一些額外處理。就此例而言,Git 會用兩個分支的末端(C4 和 C5)以及它們的共同祖先(C2)進行一次簡單的三方合併計算。圖中用紅框標出了 Git 用於合併的三個提交對象,這次,Git 沒有簡單地把分支指針右移,而是對三方合併後的結果重新做一個新的快照,並自動創建一個指向它的提交對象(C6)(見圖 3-17)。這個提交對象比較特殊,它有兩個祖先(C4 和 C5)。
在這裏插入圖片描述
以上(4)到(5)的合併就是採用的這個過程。