如何从提交对象 git ls-tree?

How to git ls-tree from a commit object?

根据文档,为了使用 git ls-tree,您需要传递树对象的哈希值。如果我想从提交对象开始获得 git ls-tree 的相同输出怎么办? 我显然可以用这样的方法来做到这一点:

git ls-tree $(git cat-file -p my_commit | grep -oP "(?<=tree ).*")

但我觉得我是在重新发明轮子。是否有 git 命令已经执行此操作?

不,git ls-tree需要一个tree-ish object

这里的“-ish”后缀很重要。根据 Cambridge Dictionary:

-ish suffix (QUITE)

used to form adjectives to give the meaning to some degree; fairly:

  • He had a sort of reddish beard.
  • She was oldish - about 60, I'd say.
  • We'll start at sevenish (= about seven o'clock).

在这种情况下,“树状”的意思是像一棵树。当然,一棵树就像一棵树。但是 commit 像一棵树 因为它只有一个树组件;这意味着您可以通过简单地使用提交本身明确地引用该树。

那么,git ls-tree <commit-ish>.