如何在Git中找到分支的哈希?

如何在Git中找到分支的哈希?,git,Git,给定本地/远程分支名称,如何获取该分支指向的提交的哈希值?该命令是您的朋友,例如: $ git rev-parse development 17f2303133734f4b9a9aacfe52209e04ec11aff4 。。。或对于远程跟踪分支: $ git rev-parse origin/master da1ec1472c108f52d4256049fe1f674af69e785d 此命令通常非常有用,因为它可以解析在git中指定分支名称的任何方法,例如: git rev-parse

给定本地/远程分支名称,如何获取该分支指向的提交的哈希值?

该命令是您的朋友,例如:

$ git rev-parse development
17f2303133734f4b9a9aacfe52209e04ec11aff4
。。。或对于远程跟踪分支:

$ git rev-parse origin/master
da1ec1472c108f52d4256049fe1f674af69e785d
此命令通常非常有用,因为它可以解析在
git
中指定分支名称的任何方法,例如:

git rev-parse master~3
git rev-parse HEAD@{2.days.ago}

。。。等。

散列存储在
.git/refs/
下,例如
.git/refs/heads/master


但编程上使用Mark Longair建议的
git rev parse
,因为这样更安全。

不要忘记,自git 2.19(2018年第2季度)以来,git准备从SHA1哈希转换到SHA2:请参阅“”

Git2.25(2020年第1季度)发展并反映了可能的新哈希

参见,,,,,,(2019年10月28日)和,(2019年10月5日)作者。
(于2019年11月10日合并)

:添加<代码>--显示对象格式选项 签字人:brian m。卡尔森

添加选项以打印用于输入、输出或存储的对象格式。
这允许shell脚本发现正在使用的哈希算法

由于过渡计划允许多个输入算法,请记录我们可能提供多个输入结果以及结果可能采用的格式。
虽然我们现在不支持这一点,但尽早记录这一点意味着脚本作者可以在将来验证他们的脚本

目前的方案包括:

显示存储库用于存储在
.git
目录、输入或输出中的对象格式(哈希算法)。 对于输入,可以打印多个算法,空格分隔。 如果未指定,则默认为“存储”


使用Git2.29(2020年第4季度),您可以确定必须使用何种格式来读取分支(或任何其他对象)的哈希提交

参见,,,,,,,,,,,,,,(2020年7月29日)作者。
参见(2020年7月29日)作者 (由年合并,2020年8月11日)

:为扩展添加文档。objectFormat 签字人:brian m。卡尔森
审核人:Eric Sunshine

记录
extensions.objectFormat
config设置。
警告用户不要自己修改它

git config
现在在其

extensions.objectFormat
指定要使用的哈希算法

可接受的值为
sha1
和>
sha256

如果未指定,则假定为sha1。
除非
core.repositoryFormatVersion
为1,否则指定此键是错误的

请注意,此设置只能由
git init
git克隆

在初始化后尝试更改它将不起作用,并且将产生难以诊断的问题


需要明确的是,在Git 2.29(2020年第4季度)中,最近添加的SHA-256支持在文档中标记为“实验性”

参见作者(2020年8月16日)
(由年合并,2020年8月24日)

:将
--对象格式=sha256
标记为实验 签字人:马丁·奥格伦

在(“
repository
:默认启用SHA-256支持”,2020-07-29,Git v2.29.0——中列出)之后,Git的普通版本允许用户运行,例如

git init --object-format=sha256  
然后离开。
这是获得SHA-256世界经验的一个好方法,例如,找到

GIT_TEST_DEFAULT_HASH=sha256 make test  
没有斑点

但这确实是一个独立的世界:这样的SHA-256回购协议将与(目前相当大的)SHA-1回购协议完全分离。
跨境互动原则上是可能的,例如通过“
diff
+
apply
”(或“
format patch
+
am
”)进行,但即使这样也有其局限性:在简单的情况下,在SHA-1回购中应用SHA-256 diff是可行的,但如果你需要求助于
-3
,那你就倒霉了

类似地,“
push
+
pull
”应该可以工作,但实际上,您的操作与世界其他地方的操作基本上是相互抵消的。当您初始化存储库时,这可能是正常的,在之后的几个月内也可能是正常的,但总有一天您会开始后悔使用了
[
git init--object format=sha256
](https://github.com/git/git/blob/ff233d8dda12657a90d378f2b403bc6c85838c59/Documentation/git-init.txt#L52)([男](https://git-scm.com/docs/git-init#Documentation/git-init.txt---object formatltformatgt))
并且已经把自己挖进了一个相当深的洞

目前,有一些主题正在编写有关SHA-256的数据格式和协议的文档,在某些情况下(midx和commit graph),我们正在考虑调整文件格式如何指示要使用的对象格式

在我们的文档中提到的
--对象格式
的地方,让我们明确一点,将其与“sha256”一起使用是实验性的。
如果我们以后需要解释为什么我们不能处理我们在2020年生成的数据,我们总是可以指向我们在这里添加的这一段

通过“include::”-添加一个小的模糊,我们应该能够在整个文档中保持一致,并最终能够逐渐降低此文本的严重性。
有一天,我们甚至可能会用它来逐步淘汰
--object format=sha1
,但我们不要超越自己

还有
扩展。objectFormat
,但只提到了三次。两次我们添加了这个新的免责声明,第三次我们已经有一个“请勿编辑”警告。从那里,感兴趣的读者应该最终找到我们在这里添加的这个新的

因为
GIT\u DEFAULT\u HASH
提供了此功能的另一个入口点,所以也要记录它的实验性质

git
现在在其

改为使用。默认值为“sha1”。此变量为 实验性!请参见
--对象格式GIT_TEST_DEFAULT_HASH=sha256 make test