Learn Git in 30 days——第 10 天:認識 Git 物件的絕對名稱

寫的非常好的一個Git系列文章,強烈推薦

原文鏈接:https://github.com/doggy8088/Learn-Git-in-30-days/tree/master/zh-cn

在 Git 版本控制的過程,每一個版本就代表一個 commit 物件。又因爲版控過程中經常會建立分支,最終產出的 commit graph 可能會蠻複雜的,所以如何識別不同的版本,或是快速定位到特定版本以取得信息,就變得很重要。本篇文章將帶大家認識 Git 裏常用的物件名稱概念與使用方法。

物件絕對名稱

在 Git 中,每個物件都會有一個以 SHA1 哈希運算過的 id,而這個 id 就是所謂的「絕對名稱」。如果該物件是 commit 物件,那這就是 commit 物件的絕對名稱,所以我們只要找出 commit 物件的絕對名稱,就可以隨時取得該版本。如下圖箭頭標示處,就是我們通過 git log 取得的 commit 物件 id,我們隨時可以取得該 commit 物件的詳細信息。

image

如果我們想看如上圖 commit 物件的內容,可以利用 git cat-file -p commitid 來取得,如下圖示:

image

物件絕對名稱的簡短語法

由於 Git 物件 id 是通過內容進行 SHA1 哈希後的結果,所以很長,在 Git 標示「絕對名稱」時,可以用前面幾碼代替,最少不可低於 4 個字元。也就是說 4 ~ 40 個字元長度的「絕對名稱」都是可以用的。

例如我們從上圖也可以看出在這個 commit 物件的的內容包含了一個 tree 物件,該物件也有一個 tree 物件的絕對名稱 07c1321be49815d53eb2413f0ad5286010ebb6cc,所以我也可以再次通過 git cat-file -p treeid 來取得該 tree 物件的內容,如下圖示:

image

有時候我們想取得版本記錄會使用 git log 命令,同時也會輸出每個文件的變更比較結果,結果會十分冗長,這時可以用 git log --pretty=oneline 指令來取得較爲精簡的歷史記錄,同時你也可以取得 commit 物件完整的「絕對名稱」,如下圖示:

image

另外一個常用的技巧則是僅輸出部分的「絕對名稱」,通過 git log --pretty=oneline --abbrev-commit 指令執行即可,如下圖示:

image

今日小結

以上這就是絕對名稱的用法,由於 Git 物件的特性,你可以通過物件的絕對名稱存取到 Git 倉庫中任意物件,還有很多 git 指令都會用到絕對名稱,熟悉了這些概念與表示法,你將更能掌握 Git 物件。

我重新整理一下本日學到的 Git 指令與參數:

  • git log
  • git cat-file -p [object_id]
  • git log --pretty=oneline
  • git log --pretty=oneline --abbrev-commit
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章