iT邦幫忙

2021 iThome 鐵人賽

DAY 20
5

這篇文章我想誠實面對自己,也勇敢地說出來。

對。我不知道要寫什麼了... 我已經把該怎麼新建本地數據庫跟 push 到 GitHub 上都闡述完了(畢竟人家開發 git 也才花 10 天,我還想寫到 30 天)。

焦慮著該怎麼面對剩下的 11 天(加上今天)、反覆上網搜尋有關 git 的一些資料,想要從茫茫大海中撈一點有用、有趣的東西來寫,最後我決定!接下來的日子我會介紹一些「不知道也不會死的 git 相關功能

因為前面 19 天講的內容已經足夠進行版本控制了,所以接下來就讓我們來看一些 git 很酷的功能吧!

那麼,就從 tag 開始。


tag V.S. branch

tag,顧名思義就是標籤。

為什麼需要對版本貼上標籤?因為這樣才能更快的找到重要的版本,像是你在下載軟體時會看到 v1.0.4 這個東西就是所謂的 tag!

這樣聽起來,tag 跟 branch 不是很像嗎?因此我查找了資料,看到【冷知識】標籤跟分支有什麼不一樣?這篇文章來做以下解釋。

首先,這兩個東西都一樣放在 .git/refs 目錄下,只是 branch 是在 heads 目錄,tag 則是在 tags 目錄。

甚至連他們的內碼都長很像,都一樣是 SHA-1 碼:

$ cat .git/refs/heads/master
db3bbec63301d1c638e828c9a38a29314c8a0c44

$ cat .git/refs/tags/big_cats
552a844022bad7f24c5e6e3b0fc2528c8ec86df7

那他們到底差在哪?

最大的差別是「branch 會隨著 Commit 而移動,但 tag 不會」。

當 Git 往前推進一個 Commit 的時候,它所在的 branch 會跟著往前移動。但 tag 一旦貼上去之後,不管 Commit 怎麼前進,tag 還是留在原來貼的位置上。

創建 git tag

而 tag 有兩種,一種是輕量級的標籤(lightweight tag),另一種是有附註解的標籤(annotated tag),以下為 git 官方對這兩種 tag 的解釋:

Annotated tags are meant for release while lightweight tags are meant for private or temporary object labels.

lightweight tag

lightweight tag 可以把它想成是一張標籤紙貼上去就好那麼的簡單!

首先,先查詢目前 commit 的 SHA-1 碼,確認想要貼到哪個 commit 上

git log --oneline

接下來,使用以下語法就可以貼上 tag 了。
後面的 <commit_SHA-1> 也可以忽略不打,這樣的話是直接貼到最新的 commit 上。

git tag <tag_name> <commit_SHA-1>

annotated tag

而 annotated tag 跟 lightweight tag 最大的差異就是 annotated tag 可以添加訊息作為註解,而創建的方式和 lightweight tag 也只差一點點而已。

git tag <tag_name> <commit_SHA-1> -a -m "message"

-a 就是讓 git 知道你要創建的 tag 是 annotated tag,-m 就跟 commit 輸入訊息一樣。

查看 tag

創建完成後,想要查看已經存在的 tag 該怎麼做呢?

只要直接輸入以下指令,就會一次列出所有 tag 囉!

git tag

倘若只想看到 1.8.5 系列的標籤,你可以執行以下指令

git tag -l "v1.8.5*"

Reference

Git 基礎 - 標籤
為你自己學 git-使用標籤
【冷知識】標籤跟分支有什麼不一樣?


上一篇
【Day19】Git 版本控制 - 多人協作 GitHub Flow
下一篇
【Day21】Git 版本控制 - git 建立快捷指令 alias
系列文
曼曼來比較快_Git 版本控制30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言