如何获取当前/又名下一次提交的 git 哈希(不是头部)

chr*_*sta 2 git bash shell hash

我想将当前的 git hash 保存到我的回购文件中,如下所示:

echo `git rev-parse HEAD` > VERSION
git add VERSION
git commit -m 'updated version'
git push
Run Code Online (Sandbox Code Playgroud)

问题是,HEAD 不是要提交的修订版的哈希值,而是工作修订版(之前的一个修订版)的哈希值。所以如果我像上面那样,我总是有上一次提交的哈希,而不是最新的。

我可以在提交提交将具有的哈希数的修订之前获得吗?

mml*_*mlr 6

提交哈希是提交对象的哈希,它包含各种字段,如提交作者、提交者、日期、父提交哈希和树哈希。树散列是该树中所有内容的散列,即所有文件的所有散列及其元数据(如模式和名称)。

修改文件(VERSION在给定的示例中),因此将修改树哈希,并且因为树哈希是提交对象的哈希内容的一部分,也是提交哈希。

预先计算散列以便在将散列记录到文件并更改树/提交散列之后将产生匹配的提交散列在理论上是可能的,但实际上不可行。这基本上意味着为每次提交产生哈希冲突。

话虽如此,如果只记录一个简短的散列就足够了,即一个合理唯一的前缀,如许多 git 命令和用户界面将显示的 7 个字符散列,这可以工作。有像git-vanity这样的项目,它会蛮力对提交对象进行小的修改,以产生特定长度的所需前缀。

简而言之,不可能获得“下一个”提交哈希,因为没有“下一个”提交哈希,它是根据该提交包含和引用的所有信息生成的。