382

做什么git rev-parse

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

挑选和按摩参数

按摩?这意味着什么?

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

git rev-parse HEAD^

或者

git rev-parse origin/master

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

4

4 回答 4

324

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..B范围git loggit diffB ^A
于 2013-04-04T04:03:28.010 回答
141

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

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

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

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

于 2015-01-31T07:34:35.783 回答
46

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

git rev-parse --abbrev-ref HEAD
于 2016-12-27T18:33:06.207 回答
4

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>

于 2021-06-18T08:06:31.783 回答