分支(branch),遠(yuǎn)程跟蹤分支(remote-tracking branch)以及標(biāo)簽(tag)都是對提交的引用。所有的引用是用‘refs’開頭,以斜杠分割的路徑。到目前為此,我們用到的引用名稱其實是它們的簡寫版本:
test
是refs/heads/test
的簡寫.v2.6.18
是refs/tags/v2.6.18
的簡寫.origin/master
是refs/remotes/origin/master
的簡寫.偶爾的情況下全名會比較有用,例如你的標(biāo)簽和分支重名了,你應(yīng)該用全名去區(qū)分它們。
(新創(chuàng)建的引用會依據(jù)它們的名字存放在.git/refs
目錄中。然而,為了提高效率,它們也可能被打包到一個文件中,參見 git pack-refs)。
另一個有用的技巧是,倉庫的名字可以代表該倉庫的 HEAD。例如,‘origin’是訪問‘origin’中的 HEAD 分支的一個捷徑。
要了解 Git 查找引用路徑的完全列表,以及多個同名簡寫引用的優(yōu)先級關(guān)系,請參見 git rev-parse 中的‘SPECIFYING REVISIONS’。
假設(shè)你想要查看在‘master"’分支可達(dá)(reachable)但其他任何分支不可達(dá)的提交。
我們可以使用 git show-ref 列出倉庫中所有的頭:
$ git show-ref --heads
bf62196b5e363d73353a9dcf094c59595f3153b7 refs/heads/core-tutorial
db768d5504c1bb46f63ee9d6e1772bd047e05bf9 refs/heads/maint
a07157ac624b2524a059a3414e99f6f44bebc1e7 refs/heads/master
24dbc180ea14dc1aebe09f14c8ecf32010690627 refs/heads/tutorial-2
1e87486ae06626c2f31eaa63d26fc0fd646c8af2 refs/heads/tutorial-fixes
我們可以使用 cut 和 grep 得到‘分支-頭’(branch-head)部分,不需要‘master’:
$ git show-ref --heads | cut -d' ' -f2 | grep -v '^refs/heads/master'
refs/heads/core-tutorial
refs/heads/maint
refs/heads/tutorial-2
refs/heads/tutorial-fixes
然后我們就可以查看 master 中特有的提交:
$ gitk master --not $( git show-ref --heads | cut -d' ' -f2 |
grep -v '^refs/heads/master' )
很明顯上面的命令可以有無數(shù)種變種;例如你想查看倉庫中所有的分支可達(dá)但標(biāo)簽不可達(dá)的提交:
$ gitk $( git show-ref --heads ) --not $( git show-ref --tags )