git rev-parse HEAD:XXX 有什么作用?

P. *_*sin 0 git git-rev-parse

我已经阅读了 git-rev-parse 的手册页,但仍然不知道这个命令是做什么的。假设我有一个结构如下的 git 项目:

MyProject
??? Folder1
??? Folder2
??? .git
Run Code Online (Sandbox Code Playgroud)

如果我跑

git-rev-parse 头

然后我可以获得与我上次提交相同的 SHA_1。很简单。

但是,如果我跑

git-rev-parse 头:Folder1

然后我得到另一个 SHA_2,它与我曾经提交的任何 SHA 不同。我的问题是:这个“git-rev-parse HEAD:Folder1”是什么意思,这个SHA_2是什么?

dan*_*1st 5

看看文档

<rev>:<path>, e.g. HEAD:README, master:./README

后缀 : 后跟一个路径,在由冒号前的部分命名的树形对象中的给定路径上命名 blob 或树。以 ./ 或 ../ 开头的路径是相对于当前工作目录的。给定的路径将被转换为相对于工作树的根目录。这对于从与工作树具有相同树结构的提交或树中寻址 blob 或树最有用。

这意味着它不会获得 commit/tag/branch/... 的哈希值,但它会获取 commit/tag/branch/... 中目录/文件的哈希值。

因此,git-rev-parse HEAD:Folder1意味着Folder1在 ref HEAD(检出状态)中获取目录树对象的 SHA 哈希。