git rev-parse有什么作用?

时间:2013-04-03 21:53:47

标签: git

git rev-parse做了什么?

我已经阅读了手册页,但它提出的问题多于答案。比如:

  

选择按摩参数

按摩?这是什么意思?

我用作修订说明符的解析器(对SHA1),例如

git rev-parse HEAD^

git rev-parse origin/master

这是命令的目的吗?如果没有,使用它来实现这一点是否正确?

4 个答案:

答案 0 :(得分:192)

git rev-parse是一个主要用于操作的辅助plumbing命令。

git rev-parse的一个常见用法是在给定修订说明符的情况下打印SHA1哈希值。此外,它还有各种格式化输出的选项,例如--short,用于打印较短的唯一SHA1。

还有其他用例(在脚本和基于git构建的其他工具中),我用过:

  • --verify验证指定的对象是否是有效的git对象。
  • --git-dir用于显示.git目录的abs / relative路径。
  • 使用--is-inside-git-dir检查您当前是否在存储库中,或使用--is-inside-work-tree检查您是否在工作树中
  • 使用--is-bare-repository
  • 检查回购是否为裸
  • 打印SHA1哈希分支(--branches),标签(--tags)和参考号也可以根据遥控器进行过滤(使用--remote
  • --parse-opt规范化脚本中的参数(类似于getopt)并打印可与eval
  • 一起使用的输出字符串

Massage只是意味着可以将信息从一种形式转换为另一种形式,即转换命令。这些是我能想到的一些简单例子:

  • 将分支或标记名称放入它指向的提交的SHA1中,以便可以将其传递给仅接受提交的SHA1值的管道命令。
  • A..Bgit log的修订范围git diff到基础管道命令的等效参数B ^A

答案 1 :(得分:74)

为了详细说明命令名rev-parse的词源,Git始终在管道命令中使用术语rev作为" revision"的缩写。通常意味着提交的40个字符的SHA1哈希值。例如,命令rev-list打印一个40-char提交哈希的列表,用于分支或其他任何内容。

在这种情况下,名称可能会扩展为parse-a-commitish-to-a-full-SHA1-hash。虽然该命令具有Tuxdude的答案中提到的几个辅助功能,但它的同名似乎是将用户友好的引用(如分支名称或缩写哈希)转换为最明确的40个字符的SHA1哈希的用例。许多编程/管道用途。

我知道我认为这是"反向解析"在我弄明白之前已经有一段时间了,并且在理解这些术语时遇到了同样的困难"按摩"和"操纵" :)

无论如何,我发现这个"解析到修订版"这是一种令人满意的思考方式,也是一种可靠的概念,可以在我需要这种东西时将这个命令铭记于心。经常在脚本编写Git中,您将用户友好的提交引用作为用户输入,并且通常希望在收到后尽快将其解析为经过验证且明确无误的工作引用。否则,输入翻译和验证往往会通过脚本激增。

答案 2 :(得分:18)

git rev-parse也适用于使用--abbrev-ref标志获取当前分支名称,如:

git rev-parse --abbrev-ref HEAD

答案 3 :(得分:1)

TLDR:

它可以帮助您找出当前 HEAD 的提交 ID

git rev-parse HEAD

或者如果你想要更短的提交

git rev-parse --short HEAD