Git
简体中文 ▾ Topics ▾ Latest version ▾ git-show-ref last updated in 2.44.0

名称

git-show-ref - 列出本地仓库中的引用

概述

git show-ref [--head] [-d | --dereference]
	     [-s | --hash[=<n>]] [--abbrev[=<n>]] [--tags]
	     [--heads] [--] [<模式>…​]
git show-ref --verify [-q | --quiet] [-d | --dereference]
	     [-s | --hash[=<n>]] [--abbrev[=<n>]]
	     [--] [<ref>…​]
git show-ref --exclude-existing[=<模式>]
git show-ref --exists <引用>

描述

显示本地仓库中可用的引用以及相关的提交 ID。可使用模式对结果进行过滤,并将标记反引用到对象 ID 中。此外,它还可用于测试特定引用是否存在。

默认情况下,显示标签、标题和远程引用。

--exclude-existing 表单是一个反向过滤器。它从标准输入流中读取引用,每行一个引用,并显示那些不存在于本地仓库中的引用。

--exists 表单可用于检查单个引用是否存在。此表单不会验证引用是否解析到实际对象。

我们鼓励使用该工具,而不是直接访问 .git 目录下的文件。

选项

--head

显示 HEAD 参考,即使它通常会被过滤掉。

--heads
--tags

分别限制为 "refs/heads" 和 "refs/tags"。 这些选项并不相互排斥;如果同时给定这两个选项,则会显示存储在 "refs/heads" 和 "refs/tags" 中的引用。

-d
--dereference

也可将引用标记转换为对象 ID。它们将以 ^{} 的形式显示。

-s
--hash[=<n>]

只显示 OID(对象 ID),不显示引用名称。与 --dereference 结合使用时,在 OID 之后仍将显示取消引用的标记。

--verify

通过要求精确的引用路径,启用更严格的引用检查。 除返回错误代码 1 外,如果未指定 --quiet ,还会打印错误信息。

--exists

检查给定的引用是否存在。如果存在,则返回 0 的退出代码;如果不存在,则返回 2 的退出代码;如果查找引用失败,则返回 1 的退出代码。

--abbrev[=<n>]

缩写对象名称。 使用 --hash 时,不必说 --hash --abbrev ; --hash=n 也可以。

-q
--quiet

不向标准输出流打印任何结果。可与 --verify 一起使用,静默检查引用是否存在。

--exclude-existing[=<模式>]

git show-ref 成为一个过滤器,从标准输入流中读取格式为 ^(?:<任何东西>\s)?<引用名称>(?:\^{})?$ 的多个引用,并对每个引用执行以下操作: (1) 如果行末有 ^{} ,则在行末去掉 ^{}; (2) 如果提供的模式与引用名称不匹配,则忽略; (3) 如果引用名不是格式正确的引用名,则警告并跳过; (4) 如果引用名称是本地仓库中存在的引用,则忽略; (5) 否则输出该行。

<模式>…​

显示与一个或多个模式匹配的引用。模式从全名末尾开始匹配,只匹配完整的部分,例如,master 匹配 refs/heads/masterrefs/remotes/origin/masterrefs/tags/jedi/master,但不匹配 refs/heads/mymasterrefs/remotes/master/jedi

输出

输出格式为:

<oid> SP <引用> LF

例如,

$ git show-ref --head --dereference
832e76a9899f560a90ffd62ae2ce83bbeff58f54 HEAD
832e76a9899f560a90ffd62ae2ce83bbeff58f54 refs/heads/master
832e76a9899f560a90ffd62ae2ce83bbeff58f54 refs/heads/origin
3521017556c5de4159da4615a39fa4d5d2c279b5 refs/tags/v0.99.9c
6ddc0964034342519a87fe013781abf31c6db6ad refs/tags/v0.99.9c^{}
055e4ae3ae6eb344cbabf2a5256a49ea66040131 refs/tags/v1.0rc4
423325a2d24638ddcc82ce47be5e40be550f4507 refs/tags/v1.0rc4^{}
...

使用 --hash(而不是 --dereference)选项时,输出格式为:

<对象 ID> LF

例如,

$ git show-ref --heads --hash
2e3ba0114a1f52b47df29743d6915d056be13278
185008ae97960c8d551adcd9e23565194651b5d1
03adf42c988195b50e1a1935ba5fcbc39b2b029b
...

实例

要显示所有称为 "master" 的引用,无论是标记、标头还是其他,也不管它们在引用命名层次中的位置有多深,都可以使用 "master":

	git show-ref master

这不仅会显示 "refs/heads/master",还会显示 "refs/remote/other-repo/master"(如果存在此类引用)。

当使用 --verify 标志时,命令需要精确的路径:

	git show-ref --verify refs/heads/master

只会匹配名为 "master" 的确切分支。

如果没有匹配的内容,git show-ref 将返回错误代码 1,在验证的情况下,它将显示一条错误信息。

在编写脚本时,可以使用 --quiet 标记要求它保持安静,这样就可以执行以下操作

	git show-ref --quiet --verify -- "refs/heads/$headname" ||
		echo "$headname 不是一个有效的分支"

来检查某个分支是否存在(请注意,我们实际上并不想显示任何结果,而且我们希望使用完整的引用名称,以避免引发部分匹配不明确的问题)。

要只显示标签,或只显示适当的分支标题,请分别使用 --tags 和/或 --heads (同时使用这两种方法意味着会显示标签和标题,但不会显示 refs/ 子目录下的其他随机引用)。

要自动取消引用标记对象,请使用 -d--dereference 标志,这样就可以执行

	git show-ref --tags --dereference

来获取所有标记及其引用内容的列表。

文件

.git/refs/*, .git/packed-refs

GIT

属于 git[1] 文档

scroll-to-top