如何在Git中获取索引的树哈希值?

4
使用Git,我如何获取暂存更改的树哈希值?也就是说,如果我提交这些更改,那么提交的树哈希值是什么(而不是提交哈希值)?
1个回答

7
最简单的方法是提交该树:
git commit-tree

说明

你不必提交完整的提交 - 虽然当然这也可以。 你只需要提交将会有的快照

幸运的是,git commit工作的方式是先建立多个阶段的提交。 一次,git commit是一个简单的shell脚本,运行这些其他更基本的Git命令:1

  1. git write-tree:这不需要参数,如果成功的话,就从索引中当前的任何内容创建树对象,并将哈希ID打印到其标准输出中。

  2. git commit-tree:它需要多个参数(尽可能多的父哈希ID和一个树哈希ID)以及提交消息,并构建提交对象。提交的快照是您在步骤1中给出的哈希ID的树。该命令将新提交对象的哈希ID打印到其标准输出中。

  3. git update-ref:它更新引用,如分支名称。 它至少需要两个参数:要更新的名称和新值(或指示“删除名称”的标志)。

所有你需要的就是步骤#1。


1git update-ref可能比提交shell脚本更新,因为在过去不好的日子里,写入ref只意味着使用适当的echo命令。 符号HEAD引用只是一个符号链接。 引用从未被打包。 一旦参考变得更加复杂并需要锁定,git update-ref就变得必要了。


谢谢 :)!看起来这里的答案就是使用git write-tree,因为它将索引的当前状态作为树哈希给出。不幸的是,这也会将对象写入存储库中,但我猜垃圾收集将在不使用它时最终清理它。 - Shum
是的。它也可以作为一个测试:索引能否按原样写出?(如果你正在进行冲突合并,它是不可能的。) - torek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接