分支(branch), 遠程跟蹤分支(remote-tracking branch)以及標簽(tag)都是對提交的引用. 所有的引用是用"refs"開頭, 以斜杠分割的路徑. 到目前為此, 我們用到的引用名稱其實是它們的簡寫版本:
~~~
- 分支"test"是"refs/heads/test"的簡寫.
- 標簽"v2.6.18"是"refs/tags/v2.6.18"的簡寫.
- "origin/master"是"refs/remotes/origin/master"的簡寫.
~~~
偶爾的情況下全名會比較有用, 例如你的標簽和分支重名了, 你應該用全名去區分它們.
(新創建的引用會依據它們的名字存放在.git/refs目錄中. 然而, 為了提高效率, 它們也可能被打包到一個文件中, 參見[git pack-refs](http://www.kernel.org/pub/software/scm/git/docs/git-pack-refs.html)).
另一個有用的技巧是, 倉庫的名字可以代表該倉庫的HEAD. 例如, "origin"是訪問"origin"中的HEAD分支的一個捷徑.
要了解Git查找引用路徑的完全列表, 以及多個同名簡寫引用的優先級關系, 請參見[git rev-parse](http://www.kernel.org/pub/software/scm/git/docs/git-rev-parse.html)中的"SPECIFYING REVISIONS".
## 顯示某分支特有的提交
假設你想要查看在"master"分支可達(reachable)但其他任何分支不可達的提交.
我們可以使用[git show-ref](http://www.kernel.org/pub/software/scm/git/docs/git-show-ref.html)列出倉庫中所有的頭:
~~~
$ 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' )
~~~
很明顯上面的命令可以有無數種變種; 例如你想查看倉庫中所有的分支可達但標簽不可達的提交:
~~~
$ gitk $( git show-ref --heads ) --not $( git show-ref --tags )
~~~
([git rev-parse](http://www.kernel.org/pub/software/scm/git/docs/git-rev-parse.html)提供了像"--not"之類的"選擇提交"語法的解釋.)
(!!update-ref!!)
- 1. 介紹
- 歡迎使用Git
- GIT對象模型
- Git目錄 與 工作目錄
- Git索引
- 2. 第一步
- 安裝Git
- 安裝與初始化
- 3. 基本用法
- 獲得一個Git倉庫
- 正常的工作流程
- 分支與合并@基礎
- 查看歷史 -Git日志
- 比較提交 - Git Diff
- 分布式的工作流程
- Git標簽
- 4. 中級技能
- 忽略某些文件
- rebase
- 交互式rebase
- 交互式添加
- 儲藏
- Git樹名
- 追蹤分支
- 使用Git Grep進行搜索
- Git的撤消操作 - 重置, 簽出 和 撤消
- 維護Git
- 建立一個公共倉庫
- 建立一個私有倉庫
- 5. 高級技能
- 創建新的空分支
- 修改你的歷史
- 高級分支與合并
- 查找問題的利器 - Git Bisect
- 查找問題的利器 - Git Blame
- Git和Email
- 定制Git
- Git Hooks
- 找回丟失的對象
- 子模塊
- 6. Git生態體系
- Git 與之 Windows
- 使用Git進行系統部署
- 與 Subversion 集成
- 從其他代碼管理工具遷移到Git
- 圖形化的Git
- Git倉庫托管
- Git的其它用法
- Git的腳本支持
- Git 與編輯器
- 7. 原理解析
- Git是如何存儲對象的
- 查看Git對象
- Git引用
- Git索引
- 打包文件
- 更底層的Git
- 傳輸協議
- 術語表