【问题标题】:how to get git hash of current / aka next commit (not head)如何获取当前/又名下一次提交的 git 哈希(不是头部)
【发布时间】:2018-01-13 11:57:00
【问题描述】:

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

echo `git rev-parse HEAD` > VERSION
git add VERSION
git commit -m 'updated version'
git push

问题,HEAD 不是要提交的修订的哈希,而是工作修订的哈希(这是以前的一个修订)。所以如果我喜欢上面我总是有上一个提交的哈希而不是最新的。

我可以在提交之前得到提交的哈希号的修订吗?

【问题讨论】:

  • @ratskin 不,它与那个问题无关。我想知道尚未提交的未来哈希 - 提交。但正如 mmir 所写,这不太可能。
  • 我将链接到stackoverflow.com/q/45850890/1256452 而不将其标记为重复,因为该答案没有可接受的答案。也许我应该关闭那个作为这个的副本! :-)

标签: bash git shell hash


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2017-06-21
    • 2014-10-29
    • 2016-04-03
    • 2020-09-06
    • 2010-10-31
    • 1970-01-01
    • 2011-03-27
    • 2021-06-13
    相关资源
    最近更新 更多