11.4 命令行工具

    空标题文档 - 图1

    空标题文档 - 图2

    11.4.1 版本表示法:git rev-parse

    空标题文档 - 图3


    $git rev-parse—symbolic—tags A B C D E F G H I J

    显示定义的所有引用。

    其中refs/remotes/目录下的引用称为远程分支(或远程引用),在后面的章节会予以介绍。


    $git rev-parse—symbolic—glob=refs/* refs/heads/master refs/remotes/origin/HEAD refs/remotes/origin/master refs/tags/A refs/tags/B refs/tags/C refs/tags/D refs/tags/E refs/tags/F refs/tags/G refs/tags/H refs/tags/I refs/tags/J

    命令git rev-parse的另外一个重要功能就是将一个Git对象表达式表示为对应的SHA1哈希值。针对本节开始克隆的版本库gitdemo-commit-tree,做如下操作。

    (1)显示HEAD对应的SHA1哈希值。


    $git rev-parse HEAD 6652a0dce6a5067732c00ef0a220810a7230655e

    (2)命令git describe的输出也可以解析为正确的SHA1哈希值。


    $git describe A-1-g6652a0d $git rev-parse A-1-g6652a0d 6652a0dce6a5067732c00ef0a220810a7230655e

    (3)可以同时显示多个表达式的SHA1哈希值。

    下面的操作可以看出master和refs/heads/master都可以用于指代master分支。


    $git rev-parse master refs/heads/master 6652a0dce6a5067732c00ef0a220810a7230655e 6652a0dce6a5067732c00ef0a220810a7230655e

    (4)可以用哈希值的前几位指代整个哈希值。


    $git rev-parse 6652 6652a0d 6652a0dce6a5067732c00ef0a220810a7230655e 6652a0dce6a5067732c00ef0a220810a7230655e

    (5)里程碑的两种表示法均指向相同的对象。


    $git rev-parse A refs/tags/A c9b03a208288aebdbfe8d84aeb984952a16da3f2 c9b03a208288aebdbfe8d84aeb984952a16da3f2

    (6)里程碑A实际指向的是一个Tag对象而非提交,用下面的三个表示法可以显示提交本身的哈希值而非里程碑对象的哈希值。

    还有,下面的语法也可以直接作用于轻量级里程碑(直接指向提交的里程碑),或者作用于提交本身。


    $git rev-parse A^{}A^0 A^{commit} 81993234fc12a325d303eccea20f6fd629412712 81993234fc12a325d303eccea20f6fd629412712 81993234fc12a325d303eccea20f6fd629412712

    (7)A的第一个父提交就是B所指向的提交。

    回忆之前的介绍,“^”操作符代表父提交。当一个提交有多个父提交时,可以通过在符号“^”后面跟上一个数字表示第几个父提交。"A^"就相当于"A^1"。而B^0代表了B所指向的一个Commit对象(因为B是Tag对象)。


    $git rev-parse A^A^1 B^0 776c5c9da9dcbb7e463c061d965ea47e73853b6e 776c5c9da9dcbb7e463c061d965ea47e73853b6e 776c5c9da9dcbb7e463c061d965ea47e73853b6e

    (8)更为复杂的表示法。

    连续的“^”符号依次沿着父提交进行定位至某一祖先提交。“^”后面的数字代表该提交的第几个父提交。


    $git rev-parse A^^3^2 F^2 J^{} 3252fcce40949a4a622a1ac012cb120d6b340ac8 3252fcce40949a4a622a1ac012cb120d6b340ac8 3252fcce40949a4a622a1ac012cb120d6b340ac8

    (9)记号~<n>就相当于连续<n>个符号“^”。


    $git rev-parse A~3 A^^^G^0 e80aa7481beda65ae00e35afc4bc4b171f9b0ebf e80aa7481beda65ae00e35afc4bc4b171f9b0ebf e80aa7481beda65ae00e35afc4bc4b171f9b0ebf

    (10)显示里程碑A对应的目录树。下面两种写法都可以。

    空标题文档 - 图4