基本概念 - 使用版本參照

·

1 min read

如果要使用 git show 指令查詢特定版本(revisions),那我們應該用什麼樣的形式來表達版本?Git 提供很多種方法來表達。

提交摘要

每個提交都有它獨一無二的身分證--SHA1 摘要,這是表達版本最直接的方法。

Git 也提供一些簡化的方法來讓我們方便使用,例如:下面這幾個寫法都能找得到同一個版本:

❯ git show 127436eac27add00ab9f3facfaad7863dabecbda
❯ git show 127436e
❯ git show 1274

最少要 4 個字,只要那 4 個字剛好不和其他版本撞名的話,Git 就會正常處理指令。

💡 Docker 的 Container 也能使用類似的概念來指定 Container,Docker 最少可以 1 個字。

參照表示法

參照表示法是平常開發最常使用的,如 git checkoutgit merge 等,都會使用到。

分支

眾所皆知,分支是指向特定提交的,包括本地分支與遠端分支都可以使用

❯ git show feature
❯ git show origin/feature

標籤

類似分支,標籤也是指向一個提交:

❯ git show v1.0.0

相對參照

使用 ^caret)與 ~tilde)表示的相對參照,會指向一個提交:

❯ git show master^
❯ git show master^^^
❯ git show master^5
❯ git show master~
❯ git show master~~~
❯ git show master~5

暫存參照

執行 git stash 後,也會產生參照

❯ git show stash@{0}

HEAD 參照

當然,HEAD 也是參照:

❯ git show HEAD

可以搭配相對參數,來達成很多應用,像是取消提交:

❯ git reset HEAD^

git rebase 時也很好用:

❯ git rebase -i HEAD~10

Git 在 1.8.5 版之後,可以用 @ 代替 HEAD

❯ git show @

@{-N}

不管是提交或切換版本,HEAD 都會到處「旅行」。Git 會記錄每個旅行站,然後可以用 @{-N} 來表示之前第 N 站。 最常應用的就是在切換版本,如下:

# On master branch
❯ git switch feature

# 這時 @{-1} 就會是 master 分支,這時可以再用 switch 切回 master
❯ git switch @{-1}

# 用在切換版本指令的時候,@{-1} 也可以用 - 取代,用起來就很像 cd -
❯ git switch -