當咱們使用git init projectName
命令的時候,Git就會默認幫咱們建立一個分支,名字叫作master。git
咱們還能夠建立其它分支,使用git branch new_branch(新分支名稱)
shell
若是咱們想在建立新分支的同時,並切換到新建的分支,須要加上額外的參數-b
,使用git checkout -b new_branch(新分支名稱)
,它等同於下面的兩條命令3d
git branch new_branch git checkout new_branch
能夠經過以下命令查看當前所處分支指針
git branch
當咱們從一個分支切換到另外一個分支,能夠使用以下命令code
git checkout another_branch(另外一個分支)
例如,從master切換到dev分支blog
刪除分支命令it
git branch -d de_branch(待刪除分支名) git branch -D de_branch(待刪除分支名)
-d
和-D
有啥區別呢,若是你想刪除的分支的內容已經合併到主分支了,那麼使用-d
便可,若是你在新分支上寫了東西,可是並無合併到主分支,你還想把它刪除,你就得使用-D
,Git這樣作是爲了保險起見,怕你忘了合併就刪除了,可是若是你確實是想還沒合併就刪除了就能夠使用-D
ast
下圖中,我再bug567分支作了一次提交操做,可是並無合併到其它分支,在使用git branch -d bug567
時,提示dev分支並無合併,若是確實想刪除它,能夠使用git branch -D bug567
class
注意,咱們不能刪除咱們當前所處的分支,什麼意思呢?若是咱們當前處於dev分支,咱們經過git branch -d dev
是沒法刪除dev分支的,須要先切換到其它分支,再去刪除這個dev分支,由於若是你當前處於dev分支,你還把它給刪除了,那麼你當前該處於什麼分支呢?這是不合理的,因此Git也不容許bug
當咱們在一個分支上寫好代碼後須要把代碼合併到主分支,這裏須要用到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