git rev-parse做什么?

git rev-parse做什么?

我已经阅读了手册页,但它提出的问题比答案更多。喜欢的东西:

挑选和按摩参数

按摩吗?这是什么意思?

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

git rev-parse HEAD^

git rev-parse origin/master

这是命令的目的吗?如果不是,用它来达到这个目的是否正确?

201884 次浏览

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

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

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

  • --verify来验证指定的对象是一个有效的git对象。
  • --git-dir用于显示.git目录的abs/相对路径。
  • 使用--is-inside-git-dir检查当前是否在存储库中,或者使用--is-inside-work-tree检查当前是否在工作树中
  • 使用--is-bare-repository检查回购是否为空
  • 打印分支(--branches)、标签(--tags)和引用的SHA1哈希值也可以基于远程(使用--remote)进行筛选
  • --parse-opt来规范化脚本中的参数(有点类似于getopt),并打印可与eval一起使用的输出字符串

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

  • 将分支或标记名称放入它所指向的提交的SHA1中,以便可以将其传递给只接受提交的SHA1值的管道命令。
  • git loggit diff的修订范围A..B转换为底层管道命令的等效参数B ^A

为了详细说明命令名称rev-parse的词源,Git一直使用术语rev在调试命令中作为“revision”的缩写,通常表示提交的40个字符的SHA1哈希。例如,命令rev-list为分支或其他对象打印一个40字符的提交哈希列表。

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

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

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

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

git rev-parse --abbrev-ref HEAD

TLDR:

它帮助你找到当前HEAD的提交ID(即你正在查看的当前提交)

git rev-parse HEAD

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

git rev-parse --short HEAD

如果您想在另一个分支中找到最新的提交,您可以这样做

git rev-parse <local-branch-name>
git rev-parse origin/<remote-branch-name>