原文:
http://gitbook.liuhui998.com/7_3.html
git
中,
分支(branch)
,
远程跟踪分支(remote-tracking branch)
以及
标签(tag)
都是对提交的引用. 所有的引用是用"
refs
"开头, 以斜杠分割的路径. 到目前为此, 我们用到的引用名称其实是它们的简写版本:
-
分支
"
test
"是"
refs/heads/
test
"的简写.
-
标签
"
v2.6.18
"是"
refs/tags/
v2.6.18
"的简写.
- "
origin/master
"是"
refs/remotes/
origin/master
"的简写.
偶尔的情况下全名会比较有用, 例如你的标签和分支重名了, 你应该用全名去区分它们.
另一个有用的技巧是, 仓库的名字可以代表该仓库的HEAD. 例如, "origin"是访问"origin"中的HEAD分支的一个捷径.
显示某分支特有的提交
假设你想要查看在"master"分支可达(reachable)但其他任何分支不可达的提交.
我们可以使用git show-ref列出仓库中所有的头:
<div><span class="pln">$ git show</span><span class="pun" style="color:rgb(102,102,0)">-</span><span class="kwd" style="color:rgb(0,0,136)">ref</span><span class="pln"> </span><span class="pun" style="color:rgb(102,102,0)">--</span><span class="pln">heads</span></div><div><span class="pln">bf62196b5e363d73353a9dcf094c59595f3153b7 refs</span><span class="pun" style="color:rgb(102,102,0)">/</span><span class="pln">heads</span><span class="pun" style="color:rgb(102,102,0)">/</span><span class="pln">core</span><span class="pun" style="color:rgb(102,102,0)">-</span><span class="pln">tutorial</span></div><div><span class="pln">db768d5504c1bb46f63ee9d6e1772bd047e05bf9 refs</span><span class="pun" style="color:rgb(102,102,0)">/</span><span class="pln">heads</span><span class="pun" style="color:rgb(102,102,0)">/</span><span class="pln">maint</span></div><div><span class="pln">a07157ac624b2524a059a3414e99f6f44bebc1e7 refs</span><span class="pun" style="color:rgb(102,102,0)">/</span><span class="pln">heads</span><span class="pun" style="color:rgb(102,102,0)">/</span><span class="pln">master</span></div><div><span class="pln">24dbc180ea14dc1aebe09f14c8ecf32010690627 refs</span><span class="pun" style="color:rgb(102,102,0)">/</span><span class="pln">heads</span><span class="pun" style="color:rgb(102,102,0)">/</span><span class="pln">tutorial</span><span class="pun" style="color:rgb(102,102,0)">-</span><span class="lit" style="color:rgb(0,102,102)">2</span></div><div><span class="lit" style="color:rgb(0,102,102)">1e87486ae06626c2f31eaa63d26fc0fd646c8af2</span><span class="pln"> refs</span><span class="pun" style="color:rgb(102,102,0)">/</span><span class="pln">heads</span><span class="pun" style="color:rgb(102,102,0)">/</span><span class="pln">tutorial</span><span class="pun" style="color:rgb(102,102,0)">-</span><span class="pln">fixes</span></div><p style="margin-top:0px; margin-bottom:10px; padding-top:0px; padding-bottom:0px"></p>
我们可以使用cut和grep得到除
"master"的其他
"分支-头"(branch-head)部分,
<div><span class="pln">$ git show</span><span class="pun" style="color:rgb(102,102,0)">-</span><span class="kwd" style="color:rgb(0,0,136)">ref</span><span class="pln"> </span><span class="pun" style="color:rgb(102,102,0)">--</span><span class="pln">heads </span><span class="pun" style="color:rgb(102,102,0)">|</span><span class="pln"> cut </span><span class="pun" style="color:rgb(102,102,0)">-</span><span class="pln">d</span><span class="str" style="color:rgb(0,136,0)">' '</span><span class="pln"> </span><span class="pun" style="color:rgb(102,102,0)">-</span><span class="pln">f2 </span><span class="pun" style="color:rgb(102,102,0)">|</span><span class="pln"> grep </span><span class="pun" style="color:rgb(102,102,0)">-</span><span class="pln">v </span><span class="str" style="color:rgb(0,136,0)">'^refs/heads/master'</span></div><div><span class="pln">refs</span><span class="pun" style="color:rgb(102,102,0)">/</span><span class="pln">heads</span><span class="pun" style="color:rgb(102,102,0)">/</span><span class="pln">core</span><span class="pun" style="color:rgb(102,102,0)">-</span><span class="pln">tutorial</span></div><div><span class="pln">refs</span><span class="pun" style="color:rgb(102,102,0)">/</span><span class="pln">heads</span><span class="pun" style="color:rgb(102,102,0)">/</span><span class="pln">maint</span></div><div><span class="pln">refs</span><span class="pun" style="color:rgb(102,102,0)">/</span><span class="pln">heads</span><span class="pun" style="color:rgb(102,102,0)">/</span><span class="pln">tutorial</span><span class="pun" style="color:rgb(102,102,0)">-</span><span class="lit" style="color:rgb(0,102,102)">2</span></div><div><span class="lit" style="color:rgb(0,102,102)">refs</span><span class="pun" style="color:rgb(102,102,0)">/</span><span class="pln">heads</span><span class="pun" style="color:rgb(102,102,0)">/</span><span class="pln">tutorial</span><span class="pun" style="color:rgb(102,102,0)">-</span><span class="pln">fixes</span></div><p style="margin-top:0px; margin-bottom:10px; padding-top:0px; padding-bottom:0px"></p>
然后我们就可以查看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 )