第 12 天:認識 Git 物件的相對名稱
在認識了 Git 物件的「絕對名稱」與「參照名稱」後,最後我們來介紹 Git 版控過程中也很常用到的「相對名稱」。
我們再複習一次,在 Git 版本控管的過程,每一個版本就代表一個 commit 物件,每個 commit 物件會有一個「絕對名稱」,該名稱是將內容以 SHA1 雜湊運算後的一個 40 字元的字串,你可以用前 4 ~ 40 個字元來當成該 commit 物件的識別名稱。版控的過程中,也可以讓你透過「參照名稱」來代表某個 commit 物件,每個「參照名稱」最終會對應到一個物件的「絕對名稱」。而「參照名稱」又區分「一般參照」與「符號參照」,其中「一般參照」直接對應到「絕對名稱」,而「符號參照」則是對應到另一個「一般參照」。
這篇文章所要介紹的則是透過「相對名稱」的表示法,讓你找到特定 commit 物件後,用相對的位置來找到其他的「commit 物件」。
關於 commit 物件彼此間的連結
比較常見的 Git 儲存庫,預設只會有一個「根 commit 物件」,也就是我們最一開始建立的那個版本,又稱「初始送交」(Initial Commit)。你也至少要有第一個 commit 物件後才能開始分支,所以我們可以說:「在一個 Git 儲存庫中,所有的 commit 物件中,除了第一個 commit 物件外,任何其他的 commit 物件一定都會有一個以上的上層 commit 物件(parent commit)」。為什麼有可能有「一個以上」的上層 commit 物件呢?因為你很有可能會合併兩個以上的分支到另一個分支裡,所以合併完成後的那個 commit 物件就會有多個 parent commit 物件。
我們用個簡單的例子來證明這點,我們用 git cat-file -p [object_id]
來取得最前面兩筆 commit 物件的內容,藉此了解到每個 commit 物件確實一定會有 parent 屬性,並指向上層 commit 物件的絕對名稱,唯獨第一筆 commit 物件不會有 parent 屬性。如下圖示: