Git使用詳細教程(8):Git分支
建立分支
當我們使用git init projectName
命令的時候,Git就會預設幫我們建立一個分支,名字叫做master。
我們還可以建立其它分支,使用git branch new_branch(新分支名稱)
如果我們想在建立新分支的同時,並切換到新建的分支,需要加上額外的引數-b
,使用git checkout -b new_branch(新分支名稱)
,它等同於下面的兩條命令
git branch new_branch
git checkout new_branch
檢視分支
可以通過如下命令檢視當前所處分支
git branch
切換分支
當我們從一個分支切換到另一個分支,可以使用如下命令
git checkout another_branch(另一個分支)
例如,從master切換到dev分支
刪除分支
刪除分支命令
git branch -d de_branch(待刪除分支名)
git branch -D de_branch(待刪除分支名)
-d
和-D
有啥區別呢,如果你想刪除的分支的內容已經合併到主分支了,那麼使用-d
即可,如果你在新分支上寫了東西,但是並沒有合併到主分支,你還想把它刪除,你就得使用-D
,Git這樣做是為了保險起見,怕你忘了合併就刪除了,但是如果你確實是想還沒合併就刪除了就可以使用-D
下圖中,我再bug567分支做了一次提交操作,但是並沒有合併到其它分支,在使用git branch -d bug567
git branch -D bug567
注意,我們不能刪除我們當前所處的分支,什麼意思呢?如果我們當前處於dev分支,我們通過git branch -d dev
是無法刪除dev分支的,需要先切換到其它分支,再去刪除這個dev分支,因為如果你當前處於dev分支,你還把它給刪除了,那麼你當前該處於什麼分支呢?這是不合理的,所以Git也不允許
分支合併
當我們在一個分支上寫好程式碼後需要把程式碼合併到主分支,這裡需要用到git merge
命令,下圖給出了示例,dev分支裡index.txt有兩行文字,而master分支index.txt裡只有一行,這裡吧dev分支的內容和master分支的內容合併,先切換到master分支,然後執行如下面命令
git merge dev
git branch -v
顯示當前所處分支,最新的一條提交訊息
探尋分支本質
分支
下圖是一個分支上由commit id組成的記錄線
HEAD儲存在哪裡呢?
上面圖中的這種也叫做fast-forward,快進,這是在沒有衝突的情況下,從某一個提交直接跳轉到最新的一個提交上。
如果有衝突的話,我們需要在主分支把衝突解決,然後再commit。此時如果我們切換到dev分支,再執行git merge master
時,也不會衝突了,而是fast-forward,此時我們再檢視dev分支最新的commit id會發現和剛剛在主分支最新的commit id一樣,dev分支只是採用了fast-forward方式更新了commit id,道理很簡單,因為在master我們解決衝突後做了提交, master已經往前走了一步了,然後我們把往前走了一步的master再往回合併的話,此時實際上dev分支已經落後於master,git會認為這是一個快進,所以直接有指向dev的指標直接指向下一個master所指向的最新commit,直接就跳過去了。
下圖這種方式,即使沒有衝突,也會產生一個新的commmit id