git rev解析头:XXX做什么?

git rev解析头:XXX做什么?,git,git-rev-parse,Git,Git Rev Parse,我已经阅读了git rev parse的手册页,但仍然不知道这个命令的作用。 假设我有一个git项目,其结构如下: MyProject ├── Folder1 ├── Folder2 ├── .git 如果我跑 git-rev解析头 然后我可以得到一个shau_1,它与我上次提交的相同。很简单 但是如果我跑 git rev解析头:Folder1 然后我得到了另一个SHA_2,它与我所犯过的任何SHA都不同。我的问题是:这个“git rev parse HEAD:Folder1”是什么意思?这个

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

MyProject
├── Folder1
├── Folder2
├── .git
如果我跑

git-rev解析头

然后我可以得到一个shau_1,它与我上次提交的相同。很简单

但是如果我跑

git rev解析头:Folder1


然后我得到了另一个SHA_2,它与我所犯过的任何SHA都不同。我的问题是:这个“git rev parse HEAD:Folder1”是什么意思?这个SHA_2是什么?

commit:path/to/file
描述了特定提交时的文件(一个“BLOB”)。例如,在git.git存储库中:

$ git rev-parse v2.31.1:git.c
9bc077a025cba4c5b3628b0eabb4d3aac0f35c63
$ git cat-file -t 9bc077a025cba4c5b3628b0eabb4d3aac0f35c63
blob
$ git cat-file -p 9bc077a025cba4c5b3628b0eabb4d3aac0f35c63 | head
#include "builtin.h"
#include "config.h"
#include "exec-cmd.h"
#include "help.h"
#include "run-command.h"
#include "alias.h"
#include "shallow.h"

#define RUN_SETUP       (1<<0)
#define RUN_SETUP_GENTLY    (1<<1)
当然,
path/to/file
可能是一个目录,在这种情况下,输出哈希将指向一个树对象。

看一下:

:,例如HEAD:README,master:。/README

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

这意味着它不会得到commit/tag/branch/…的散列。。。但是它在commit/tag/branch/中获取目录/文件的哈希值


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

HEAD:Folder1
之间不能有空格字符,否则您将再次获取提交散列和文件名(
Folder1
   <rev>:<path>, e.g. HEAD:README, master:./README
       A suffix : followed by a path names the blob or tree at the given
       path in the tree-ish object named by the part before the colon. A
       path starting with ./ or ../ is relative to the current working
       directory. The given path will be converted to be relative to the
       working tree’s root directory. This is most useful to address a blob
       or tree from a commit or tree that has the same tree structure as the
       working tree.