iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 8
1

今天介紹分支 (branch) 和標籤 (tag)。

分支操作

有的時候我們會故意想讓提交記錄岔開,例如,我在開發新功能的同時也想要修復 bug,但我又希望這兩種工作的工作目錄狀態及提交紀錄可以分開,視情況在兩種工作間切換,此時我們就可以利用岔開的概念,也就是開分支 (branch) 的方式來進行。有了分支,提交記錄就不再是線性的,會開始往左右發展,這就進入了 Git 的第二個維度(左右)。因為分支有點像是樹枝岔開的感覺,所以整個 Git 的提交記錄,我們會稱它是一種樹狀 (tree) 結構。

分支在實務上的操作會給它個名字。在我們的提交記錄還沒有任何分支前,看起來是線性的,我們稱它為主幹分支 (master branch),可以把它想成是 Git 提交記錄樹的樹幹。知道 master 是什麼後就可以解釋前面看過的 HEAD -> master 是什麼意思了。例如下面的例子,表示 HEAD 指標指到 master 分支,它們都位於 ca82a6 提交,用白話說就是:我們現在位於 master 分支的 ca82a6 提交。

commit ca82a6dff817ec66f44342007202690a93763949 (HEAD -> master, origin/master, origin/HEAD)

要建立一個分支,我們使用 git branch <name> 這個指令,這個指令只會新增分支,但不會切換過去。例如建立一個分支後會發生什麼事呢?其實它只是多了一個指標,去指向這個新分支最近的一個提交。以上面的例子,假設我在 ca82a6 這個提交新開一個分支 bugfix,指令是

$ git branch bugfix 

然後我們再用 git log --decorate 看一下,會發現最近的提交多了一個 bugfix 的引用,但 HEAD 還是指向 master

commit ca82a6dff817ec66f44342007202690a93763949 (HEAD -> master, origin/master, origin/HEAD, bugfix)
Author: Scott Chacon <schacon@gmail.com>
Date:   Mon Mar 17 21:52:11 2008 -0700

    changed the verison number

如果要切換到 bugfix 這個分支,我們使用 git checkout <branch> 這個指令。git checkout 先前有出現過,但用途和這裡有點不同。這裡的範例如下:

$ git checkout bugfix

看一下 git log --decorate 的結果,現在 HEAD 指向 bugfix,表示我們已經位於 bugfix 這個指標了。

commit ca82a6dff817ec66f44342007202690a93763949 (HEAD -> bugfix, origin/master, origin/HEAD, master)
Author: Scott Chacon <schacon@gmail.com>
Date:   Mon Mar 17 21:52:11 2008 -0700

    changed the verison number

前面這兩個指令可以合成一個,會新建一個分支並且切換過去。

$ git checkout -b bugfix

標籤 (tag) 管理

標籤的用途之一是要標示某個特定提交為發行版本。它有兩種型式,一種是輕量標籤 (lightweight),一種是標註標籤 (annotated tag),標註標籤在建立時可以加上訊息。這兩種標籤在 Git 內部的表示方式似乎有所不同,不過不管是那一種標籤,把它想成是一張貼在提交上的貼紙就可以了。

建立標註標籤的方式如下:

$ git tag -a v1.4 -m "my version 1.4"

標註標籤要加上 -a 的旗標,-m 則是訊息內容,和提交相同,若沒有使用 -m 會跳出文字編輯器畫面用以輸入訊息。這個標籤會「貼」在目前所位於的提交上。若要指定標籤到其他的提交,請加上提交作為參數,例如 git tag -a v1.2 9fceb02

如果要建立輕量標籤,不需使用 -a-m 旗標。

$ git tag v1.4-lw

要列出目前所有的標籤,可以使用 git tag。要輸出符合某一個樣式的標籤,可以用 git tag -l <pattern>,例如:

$ git tag -l "v1.8.5*"

範例輸出如下:

v1.8.5
v1.8.5-rc0
v1.8.5-rc1
v1.8.5.1
v1.8.5.2

要列出某一個特定標籤的內容,使用 git show <tag>,例如:

$ git show v1.4

範例輸出如下:

tag v1.4
Tagger: Ben Straub <ben@straub.cc>
Date:   Sat May 3 20:19:12 2014 -0700

my version 1.4

commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date:   Mon Mar 17 21:52:11 2008 -0700

    changed the version number

要刪除標籤,使用 -d 旗標,例如 git tag -d v1.4-lw

今天就先到這裡,我們明天從分支的合併開始看起。


上一篇
[Day 07] Git (3)
下一篇
[Day 09] Git (5)
系列文
30 天準備 LPI DevOps Tools Engineer 證照30

尚未有邦友留言

立即登入留言