在唸書的時候,有時候因為字數太多,我們可能會拿著一隻筆指著目前正在閱讀的地方,一字一字往下移動;而在看樂高手冊製作積木的過程中,我們也有可能因為步驟太多,每執行一步,就在目前的步驟上擺上一個標籤;在 GIT 版本控制的世界裡,這隻筆、這個標籤是什麼呢?它是 HEAD。
在 GIT 的環境裡,HEAD 會一直指在目前所在的步驟,如果目前儲存庫所在的位置在 master 分支最後的版本上,那就可以看到 HEAD 指向 master。在還沒正式開始使用其他分支之前,大家一般看到的樣貌就會是如此。
當我們執行指令 git log
時,也會看到類似上圖畫面。而當我們使用指令 git checkout
作切換 HEAD 指標,如畫面中所顯示的紀錄為「 init 」的那個 Hash Code。 git checkout c9ae9c0
則可以幫把 HEAD 挪移到完成該 HASH 所代表的步驟之後的結果 。當我們順利執行好 checkout 指令之後,再透過 git log —all
就可以看到 HEAD 目前所在的位置已經來到 c9ae9c0
開頭的這個位置上了。
同樣的例子,在 SourceTree 上面,我們可以看到,同樣當 HEAD 還在 master 目前版本的時候,畫面上所指的地方,會以空心圈圈標示,目前的 HEAD,而在左下角說明的地方 label 的位置也會顯示這邊是 HEAD master。
當我們把目前的儲存庫指向上面所提到的 c9ae9c0
這個位置的時候,左邊 BRANCHES 的地方,多了一個 HEAD,畫面上方的線圖,也顯示目前的 HEAD 在 c9ae9c0
的位置,同樣的左下角細節說明的地方,也呈現 Labels 為 HEAD。
而當我們知道 HEAD 之後,如果我們一樣想把 HEAD checkout 到上一個步驟,但又不想去反查對應的 hash code 時,我們還可以使用 HEAD^
這個指令,也就是在 HEAD 後面加上 ^
符號。
舉例來說,如果是 HEAD 的上一個步驟,就使用 HEAD^
,如前面舉的例子,原本在 HEAD 指向 master 的時候,執行 git checkout c9ae9c0
指令,就可以替換 git checkout HEAD^
。如果是上兩個步驟,就使用 HEAD^^
,上三個就 HEAD^^^
,如果是上十個,我們還可以使用 HEAD~10
,當然上三個也可以替換成 HEAD~3
。
以昨天的內容所提到的例子來說,目前的位置在 HASH C,則:
在樂高製作的過程,了解現在執行到哪個步驟上,才能逐一的完成步驟;在人生的路上,清楚的知道自己的定位、目標方向很重要;而,在 GIT 版本控制的系統中也是。
今天談到幾個重點:
git checkout
做 HEAD 的指向切換,也就是改變目前原始碼呈現的版本。HEAD^
及HEAD~3
來更快速的往前切換到不同的步驟上。