iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 7
2
Software Development

用樂高玩轉 GIT 版本控制系列 第 7

Day 07 - 做到哪個步驟了?現在在哪?GIT HAED 很重要

在唸書的時候,有時候因為字數太多,我們可能會拿著一隻筆指著目前正在閱讀的地方,一字一字往下移動;而在看樂高手冊製作積木的過程中,我們也有可能因為步驟太多,每執行一步,就在目前的步驟上擺上一個標籤;在 GIT 版本控制的世界裡,這隻筆、這個標籤是什麼呢?它是 HEAD。

GIT 的 HEAD

在 GIT 的環境裡,HEAD 會一直指在目前所在的步驟,如果目前儲存庫所在的位置在 master 分支最後的版本上,那就可以看到 HEAD 指向 master。在還沒正式開始使用其他分支之前,大家一般看到的樣貌就會是如此。

HEAD 指向 master

當我們執行指令 git log 時,也會看到類似上圖畫面。而當我們使用指令 git checkout 作切換 HEAD 指標,如畫面中所顯示的紀錄為「 init 」的那個 Hash Code。 git checkout c9ae9c0 則可以幫把 HEAD 挪移到完成該 HASH 所代表的步驟之後的結果 。當我們順利執行好 checkout 指令之後,再透過 git log —all 就可以看到 HEAD 目前所在的位置已經來到 c9ae9c0 開頭的這個位置上了。

HEAD 指向 c9ae9c0

以工具 SourceTree 為例

同樣的例子,在 SourceTree 上面,我們可以看到,同樣當 HEAD 還在 master 目前版本的時候,畫面上所指的地方,會以空心圈圈標示,目前的 HEAD,而在左下角說明的地方 label 的位置也會顯示這邊是 HEAD master。

以SourceTree為例 HEAD 指向 master

當我們把目前的儲存庫指向上面所提到的 c9ae9c0 這個位置的時候,左邊 BRANCHES 的地方,多了一個 HEAD,畫面上方的線圖,也顯示目前的 HEAD 在 c9ae9c0 的位置,同樣的左下角細節說明的地方,也呈現 Labels 為 HEAD。

以SourceTree為例 HEAD 指向 c9ae9c0

以 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,則:

以 HEAD^為例

總結:

在樂高製作的過程,了解現在執行到哪個步驟上,才能逐一的完成步驟;在人生的路上,清楚的知道自己的定位、目標方向很重要;而,在 GIT 版本控制的系統中也是。

今天談到幾個重點:

  1. 我們可以使用 git checkout 做 HEAD 的指向切換,也就是改變目前原始碼呈現的版本。
  2. GIT 上每個 hash code 都代表一些原始碼的改變,當 HEAD 切換到該 hash code 時,原始碼會呈現該 HASH 所代表的原始碼改變改變後的樣貌
  3. 可以使用 HEAD^HEAD~3 來更快速的往前切換到不同的步驟上。

上一篇
Day 06 - 今天只談 Git Add 及 Commit 的組合技
下一篇
Day 08 - 當你想為你的手冊作不一樣的版本時,談 git branch
系列文
用樂高玩轉 GIT 版本控制30

尚未有邦友留言

立即登入留言