HEAD指針
使用git checkout 來移動HEAD指針,移動的對象可以是分支指針也可以是快照。
HEAD指針可以指向快照也可以指向branch。當指向branch時提交后會和branch指針一起向后移動,當不指向branch提交時時則會在一個detached狀態。
分支(branch)指針
使用git branch -f 來移動分支指針,移動的對象只能是快照。當且僅當HEAD指針指向分支指針的時候,提交才會有效。
實例
1.HEAD指針默認指向當前的分支指針,用星號表示,如master*
master
2.移動HEAD指針,git checkout C1
這個時候HEAD指針指向的是快照,這個時候指針的狀態稱之為游離狀態,detached。
這里寫圖片描述
3.HEAD指針在游離狀態下提交,git commit
游離狀態下提交的commit,沒有分支指針指向。可以在游離狀態下的快照新建分支或強制移動已存在的分支
這里寫圖片描述
4.移動HEAD指針,讓他指向master分支指針git checkout master
這里寫圖片描述
5.在master分支指針上提交git commit
這個是正常的提交,和游離狀態下的提交是不一樣的
這里寫圖片描述
6.給detached狀態下的快照添加分支。在3中我們提到給detached狀態下的快照增加分支的兩種方法。
6.1給detached狀態下的快照新建一個分支
6.1.1 將HEAD指針移動到detached狀態的快照git checkout C2
這里寫圖片描述
6.1.2添加分支git branch new
這里寫圖片描述
6.1.3將HEAD指針移動到new分支指針上就可以在new分支上提交了git checkout new
這里寫圖片描述
6.2移動已存在的分支到detached狀態的分支git branch -f master C2
這個時候master分支以前的快照C3就變成了detached狀態了
這里寫圖片描述