git rev-parse做什么?
我已经阅读了手册页,但它提出的问题比答案更多。喜欢的东西:
挑选和按摩参数
按摩吗?这是什么意思?
我正在使用作为修订说明符的解析器(到SHA1),如
git rev-parse HEAD^
or
git rev-parse origin/master
这是命令的目的吗?如果不是,用它来达到这个目的是否正确?
git rev-parse做什么?
我已经阅读了手册页,但它提出的问题比答案更多。喜欢的东西:
挑选和按摩参数
按摩吗?这是什么意思?
我正在使用作为修订说明符的解析器(到SHA1),如
git rev-parse HEAD^
or
git rev-parse origin/master
这是命令的目的吗?如果不是,用它来达到这个目的是否正确?
当前回答
为了详细说明命令名称rev-parse的词源,Git在调试命令中一直使用rev这个术语作为“revision”的缩写,通常表示提交的40个字符的SHA1哈希。例如,命令rev-list为分支或其他东西打印一个40字符的提交哈希列表。
在这种情况下,名称可以扩展为解析提交到完整的sha1哈希。虽然该命令具有Tuxdude的回答中提到的几个辅助功能,但它的同名似乎是将用户友好的引用(如分支名称或缩写散列)转换为明确的40个字符的SHA1散列(对于许多编程/管道目的非常有用)的用例。
我知道,在我弄清楚之前,我一直认为这是“反向解析”的东西,并且在理解“按摩”和“操纵”这两个术语时遇到了同样的麻烦:)
无论如何,我发现这种“从解析到修订”的概念是一种令人满意的思考方式,也是一种可靠的概念,可以在我需要这类东西时想起这个命令。在编写Git脚本时,经常会使用用户友好的提交引用作为用户输入,并且通常希望在收到它后尽快将其解析为经过验证且明确的工作引用。否则,输入转换和验证往往会在脚本中激增。
其他回答
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>
git rev-parse同样适用于使用——abbrev-ref标志来获取当前分支的名称,比如:
git rev-parse --abbrev-ref HEAD
为了详细说明命令名称rev-parse的词源,Git在调试命令中一直使用rev这个术语作为“revision”的缩写,通常表示提交的40个字符的SHA1哈希。例如,命令rev-list为分支或其他东西打印一个40字符的提交哈希列表。
在这种情况下,名称可以扩展为解析提交到完整的sha1哈希。虽然该命令具有Tuxdude的回答中提到的几个辅助功能,但它的同名似乎是将用户友好的引用(如分支名称或缩写散列)转换为明确的40个字符的SHA1散列(对于许多编程/管道目的非常有用)的用例。
我知道,在我弄清楚之前,我一直认为这是“反向解析”的东西,并且在理解“按摩”和“操纵”这两个术语时遇到了同样的麻烦:)
无论如何,我发现这种“从解析到修订”的概念是一种令人满意的思考方式,也是一种可靠的概念,可以在我需要这类东西时想起这个命令。在编写Git脚本时,经常会使用用户友好的提交引用作为用户输入,并且通常希望在收到它后尽快将其解析为经过验证且明确的工作引用。否则,输入转换和验证往往会在脚本中激增。
Git rev-parse是一个辅助的管道命令,主要用于操作。
git rev-parse的一个常见用法是打印给定修订说明符的SHA1哈希值。此外,它还有各种选项来格式化此输出,例如——short表示打印较短的惟一SHA1。
还有其他用例(在脚本和其他构建在git之上的工具中),我用于:
--verify to verify that the specified object is a valid git object. --git-dir for displaying the abs/relative path of the .git directory. Checking if you're currently within a repository using --is-inside-git-dir or within a work-tree using --is-inside-work-tree Checking if the repo is a bare using --is-bare-repository Printing SHA1 hashes of branches (--branches), tags (--tags) and the refs can also be filtered based on the remote (using --remote) --parse-opt to normalize arguments in a script (kind of similar to getopt) and print an output string that can be used with eval
按摩仅仅意味着可以将信息从一种形式转换为另一种形式,即转换命令。以下是我能想到的一些简单的例子:
将分支或标记名称放入它所指向的提交的SHA1中,以便可以将其传递给只接受提交的SHA1值的管道命令。 git log或git diff的修订范围a ..B为底层管道命令的等效参数B ^ a