使用Git,我如何获取暂存更改的树哈希值?也就是说,如果我提交这些更改,那么提交的树哈希值是什么(而不是提交哈希值)?
git commit-tree
你不必提交完整的提交 - 虽然当然这也可以。 你只需要提交将会有的快照。
幸运的是,git commit
工作的方式是先建立多个阶段的提交。 一次,git commit
是一个简单的shell脚本,运行这些其他更基本的Git命令:1
git write-tree
:这不需要参数,如果成功的话,就从索引中当前的任何内容创建树对象,并将哈希ID打印到其标准输出中。
git commit-tree
:它需要多个参数(尽可能多的父哈希ID和一个树哈希ID)以及提交消息,并构建提交对象。提交的快照是您在步骤1中给出的哈希ID的树。该命令将新提交对象的哈希ID打印到其标准输出中。
git update-ref
:它更新引用,如分支名称。 它至少需要两个参数:要更新的名称和新值(或指示“删除名称”的标志)。
所有你需要的就是步骤#1。
1git update-ref
可能比提交shell脚本更新,因为在过去不好的日子里,写入ref只意味着使用适当的echo
命令。 符号HEAD
引用只是一个符号链接。 引用从未被打包。 一旦参考变得更加复杂并需要锁定,git update-ref
就变得必要了。
git write-tree
,因为它将索引的当前状态作为树哈希给出。不幸的是,这也会将对象写入存储库中,但我猜垃圾收集将在不使用它时最终清理它。 - Shum