在提交之前知道 git hash 吗?

问题描述 投票:0回答:3

有什么方法可以在提交之前知道提交的哈希值吗?

git hash
3个回答
21
投票

您需要这个的可能原因是什么?如果您正在考虑将提交的哈希值放入其自己的提交消息中,我很遗憾地告诉您,但这是不可能的(或者至少在不破坏 SHA1 的情况下是不可能的)。提交消息是生成哈希时使用的部分之一,因此任何修改消息的尝试都会更改哈希。

无论如何,在提交之前找出提交的哈希值与实际提交、写下哈希值然后丢弃提交几乎没有区别(正如 Carl Norum 在他的评论中建议的那样)。原因是哈希是通过创建提交对象并通过 SHA1 传递来生成的。因此,为了在不提交的情况下找到哈希,您基本上必须手动完成提交过程并对结果进行 SHA1,而不实际将对象写入磁盘。这不仅不切实际,而且完全没有意义。


18
投票

提交哈希取决于提交时间。

如果您在同一秒内进行两次具有相同更改、相同父级、相同作者和提交消息的提交,您将获得相同的哈希值。否则,哈希值应该不同。


3
投票

如果您只对可预测的提交引用感兴趣,而不关心完整的哈希值,则可以在使用 lucky-commit 提交您喜欢的任何内容后自定义短哈希值(前 4 到 8 个字符)。这也适用于 GPG 签名的提交。

注意事项:

  • 一开始固定的字符越多,花费的时间就越长,呈指数级增长。
  • 它必须在每次提交后运行
  • 它将为本地存储库中的每个提交进行重复提交。请参阅下面的示例:
% git log --oneline --graph         
* 0000003 (HEAD -> master) Third commit
* 0000002 Second commit
* 0000001 First commit
% git log --oneline --graph --reflog
* 4ef3899 Third commit
| * 0000003 (HEAD -> master) Third commit
|/  
* 0000002 Second commit
| * d756f59 Second commit
|/  
* 0000001 First commit
* a1e6be7 First commit

在提交之前找到提交哈希在理论上是可能的,但需要深入了解 git 的内部工作原理,然后围绕它设计一个解决方案。有关简要概述,您可以阅读 Git Magic 第 8 章揭秘,其中有关 BlobsTreesCommits 的部分。

© www.soinside.com 2019 - 2024. All rights reserved.