git rev-parse有什么作用?


282

怎么git rev-parse办?

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

挑选和按摩参数

按摩?那是什么意思?

我正在使用修订说明符(对SHA1)作为解析器,例如

git rev-parse HEAD^

要么

git rev-parse origin/master

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


3
据我在手册页中看到的,它是解析其他命令的修订版/对象名称的主要内部工具。您正在执行的操作几乎就是该rev-parse命令的目的。您还可以使用它来规范化命令行,这样实际的程序就不必了解Git的复杂对象名称语法(您可以git rev-parse在命令行之前更改或“按摩”某些参数)。称为实际程序)。


60
git rev-parse可笑的手册页令人难以理解。令我惊讶的是,即使在5年之后,没有人愿意将这种术语重写为人类可读的东西。
not2qubit

@ not2qubit我:“谢谢您的澄清,我感到自卑。” 莱纳斯·托瓦尔兹(Linus Torvalds):“我重新阅读了一下,您究竟不理解哪个部分?”
Brain2000

Answers:


245

git rev-parseplumbing主要用于操纵的辅助命令。

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

我还用于其他一些用例(在基于git的脚本和其他工具中):

  • --verify 验证指定的对象是有效的git对象。
  • --git-dir用于显示目录的绝对/相对路径.git
  • 使用以下命令检查您当前是否在存储库--is-inside-git-dir中:--is-inside-work-tree
  • 检查回购是否裸露使用 --is-bare-repository
  • 还可以基于远程对象(使用)过滤分支(--branches),标签(--tags)和引用的SHA1哈希值--remote
  • --parse-opt规范化脚本中的参数(类似于getopt),并输出可与eval

Massage仅表示可以将信息从一种形式转换为另一种形式,即转换命令。这些是我可以想到的简单示例:

  • 指向提交的SHA1的分支或标记名称,以便可以将其传递给仅接受提交的SHA1值的管道命令。
  • 基本管道命令的等效参数或等效参数的修订范围A..Bgit loggit diffB ^A

102

只是为了详细说明命令名称的词源rev-parse,Git始终rev在管道命令中使用该术语作为“修订”的缩写,通常表示40个字符的SHA1哈希表示一次提交。命令rev-list例如,为分支或其他内容打印40个字符的提交哈希值列表。

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

我知道我一直在想着它是“反向解析”的东西,然后才弄清楚,并且在理解“按摩”和“操纵”这两个术语时遇到了同样的麻烦:)

无论如何,我发现此“解析到修订”概念是一种令人满意的方式,也是我在需要此类命令时想到此命令的可靠概念。通常,在编写Git脚本时,您会使用用户友好的提交参考作为用户输入,并且通常希望在收到Git后尽快将其解析为经过验证且明确的工作参考。否则,输入翻译和验证往往会在脚本中扩散。


9
感谢您的解释,我一点也不了解git-docs:git-scm.com/docs/git-rev-parse
Jacob McKay

你可以给我们的一个例子messaging,并manipulation为您暗示过吗?
陈博

5
换句话说,git rev-parse是的缩写git revision-parse。它接受给定的输入并返回相应的40个字符的修订版ID。
乔纳森·本

36

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

git rev-parse --abbrev-ref HEAD

是否可以通过这种方式获取提交消息?
Leo Droidcoder

2
@LeoDroidcoder试试git log --format=%B -n 1 <revision>
hipyhop
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.