我可以使用以下命令打印当前提交的树:
git cat-file -p master^{tree}
100644 blob 8fe01e69e28f7c6997c0f5372c015363947582d8 .angular-cli.json
100644 blob 6975847ed5aa229532141a971337caca0a401451 .dockerignore
100644 blob 1f354482f8681a1b017bc4fdde17a4802e84b06a .editorconfig
100644 blob 9c4b02c9bd7338416bcb4037c5d5fac4c116bca5 .env.example
040000 tree d9e02522647d4f28dc40f62dca564afa48fba019 .github
我现在想知道如何在当前索引、暂存文件中打印文件?我正在寻找像 git cat-file
这样的低级命令,而不是高级命令。
我看到有这个index
文件:
ls .git/index
.git/index
但是打印其内容的命令是什么(同样是低级命令,带有此文件的参数(?
git cat-file
只打印对象(树、斑点等(的内容。 如果要显示索引的内容,则需要名称相似但不同的git ls-files
。 使用 --stage
命令显示舞台:
$ git ls-files --stage
100644 234d33c1e3554c5f3428f0d7d5c508e4cec6d148 0 README.md
100644 efdf34514e7d7f71ef1a53c441fabbcef39c7087 0 src/foo.h
100644 a2d78b7702b46a25dd1fe86ec230a7911ed18e36 0 src/foo.c
100644 7807599d8d4971566e3b92e474ee88ad9f0217aa 0 test.c
这将显示索引的内容以及阶段信息,包括对象 ID、阶段级别和文件模式。 您还可以显示磁盘缓存信息的内容:时间戳和文件大小等元数据,git 使用它来确定文件是否可能在磁盘上发生了更改并需要检查。 若要查看该信息,可以使用 --debug
标志:
$ git ls-files --debug
README.md
ctime: 1523823765:79574029
mtime: 1523823765:79245702
dev: 16777221 ino: 34669602
uid: 501 gid: 20
size: 8253 flags: 0
src/foo.c
ctime: 1523830223:524847547
mtime: 1523830223:524623074
dev: 16777221 ino: 34676974
uid: 501 gid: 20
size: 4071 flags: 0
src/foo.h
ctime: 1523752084:2627730
mtime: 1523752084:2060254
dev: 16777221 ino: 34621108
uid: 501 gid: 20
size: 36809 flags: 0
tests/response.c
ctime: 1523826062:78659995
mtime: 1523826062:78659995
dev: 16777221 ino: 34672776
uid: 501 gid: 20
size: 30615 flags: 0
这里接受的答案是不正确的。
git ls-files
的--stage
选项并不意味着"仅列出暂存文件";相反,它仅修改输出的格式。从git ls-files
手册页:
-s, --stage
在输出中显示暂存内容的模式位、对象名称和暂存编号。
若要仅查看索引中的文件,可以使用:
$ git diff-index HEAD
例如,如果我有一个包含三个文件的存储库:
$ git ls-files
file1
file2
file3
我添加一个新文件:
$ git add file4
然后git ls-files --stage
将显示存储库中的所有文件,包括索引:
$ git ls-files --stage
100644 5ce91bb123e763d519b0ad929eaf56a2464c7c36 0 file1
100644 5ce91bb123e763d519b0ad929eaf56a2464c7c36 0 file2
100644 5ce91bb123e763d519b0ad929eaf56a2464c7c36 0 file3
100644 6baefff73e8fec350b060518bd108aa5d80b24ed 0 file4
但git diff-index HEAD
将仅显示暂存文件:
$ git diff-index HEAD
:000000 100644 0000000000000000000000000000000000000000 6baefff73e8fec350b060518bd108aa5d80b24ed A file4
如果你只想要文件名,--name-only
标志会得到你想要的:
$ git diff-index --name-only HEAD
file4
你可以尝试使用 git ls 文件:
git-scm.com/docs/git-ls-files -显示有关索引和工作树中的文件的信息
附言刚刚将其从评论中移出。