git rev-parse有什么作用?

tal*_*les 248 git git-rev-parse

怎么git rev-parse办?

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

挑选和按摩参数

按摩?那是什么意思?

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

git rev-parse HEAD^
Run Code Online (Sandbox Code Playgroud)

要么

git rev-parse origin/master
Run Code Online (Sandbox Code Playgroud)

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

Tux*_*ude 215

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

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

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

  • --verify 验证指定的对象是否是有效的git对象.
  • --git-dir用于显示目录的abs /相对路径.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 diff为用于底层的管道命令作为等效参数B ^A


sca*_*nny 83

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

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

我知道我认为这是"反向解析"的东西很长一段时间才弄清楚,并且在理解术语"按摩"和"操纵"时遇到同样的麻烦:)

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

  • 哇,事实证明“git rev-parse”实际上非常容易理解。为什么手册页是用这样的象形文字写的? (10认同)
  • 谢谢你的解释,我不理解git-docs:http://git-scm.com/docs/git-rev-parse (8认同)
  • 换句话说,“ git rev-parse”是“ gitversion-parse”的缩写。它接受给定的输入并返回相应的40个字符的修订版ID。 (5认同)
  • git doc 本身就像管道,而这个答案就是瓷器。 (2认同)

Sam*_*iin 27

总而言之:

它可以帮助您找出当前 HEAD 的提交 ID(即您正在查看的当前提交)

git rev-parse HEAD
Run Code Online (Sandbox Code Playgroud)

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

git rev-parse --short HEAD
Run Code Online (Sandbox Code Playgroud)

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

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

Run Code Online (Sandbox Code Playgroud)


mit*_*tra 26

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

git rev-parse --abbrev-ref HEAD
Run Code Online (Sandbox Code Playgroud)

  • @LeoDroidcoder 尝试 `git log --format=%B -n 1 &lt;revision&gt;` (3认同)