离线下载
PDF版 ePub版

liuhui · 更新于 2018-11-28 11:00:43

Git 引用

分支(branch),远程跟踪分支(remote-tracking branch)以及标签(tag)都是对提交的引用。所有的引用是用‘refs’开头,以斜杠分割的路径。到目前为此,我们用到的引用名称其实是它们的简写版本:

  • 分支testrefs/heads/test的简写.
  • 标签v2.6.18refs/tags/v2.6.18的简写.
  • origin/masterrefs/remotes/origin/master的简写.

偶尔的情况下全名会比较有用,例如你的标签和分支重名了,你应该用全名去区分它们。

(新创建的引用会依据它们的名字存放在.git/refs目录中。然而,为了提高效率,它们也可能被打包到一个文件中,参见 git pack-refs)。

另一个有用的技巧是,仓库的名字可以代表该仓库的 HEAD。例如,‘origin’是访问‘origin’中的 HEAD 分支的一个捷径。

要了解 Git 查找引用路径的完全列表,以及多个同名简写引用的优先级关系,请参见 git rev-parse 中的‘SPECIFYING REVISIONS’。

显示某分支特有的提交

假设你想要查看在‘master"’分支可达(reachable)但其他任何分支不可达的提交。

我们可以使用 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' )

很明显上面的命令可以有无数种变种;例如你想查看仓库中所有的分支可达但标签不可达的提交:

$ gitk $( git show-ref --heads ) --not  $( git show-ref --tags )
上一篇: 查看 Git 对象 下一篇: Git 索引