有什么方法可以在提交之前知道提交的哈希值吗?
您需要这个的可能原因是什么?如果您正在考虑将提交的哈希值放入其自己的提交消息中,我很遗憾地告诉您,但这是不可能的(或者至少在不破坏 SHA1 的情况下是不可能的)。提交消息是生成哈希时使用的部分之一,因此任何修改消息的尝试都会更改哈希。
无论如何,在提交之前找出提交的哈希值与实际提交、写下哈希值然后丢弃提交几乎没有区别(正如 Carl Norum 在他的评论中建议的那样)。原因是哈希是通过创建提交对象并通过 SHA1 传递来生成的。因此,为了在不提交的情况下找到哈希,您基本上必须手动完成提交过程并对结果进行 SHA1,而不实际将对象写入磁盘。这不仅不切实际,而且完全没有意义。
提交哈希取决于提交时间。
如果您在同一秒内进行两次具有相同更改、相同父级、相同作者和提交消息的提交,您将获得相同的哈希值。否则,哈希值应该不同。
如果您只对可预测的提交引用感兴趣,而不关心完整的哈希值,则可以在使用 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 章揭秘,其中有关 Blobs、Trees 和 Commits 的部分。