git の tree-ish を tree object の id に変換するには？


git の tree-ish には、いくつかの書式があります。

[code]

    develop
    develop^
    HEAD
    develop:some-dir
    
[/code]

これらを引数に、 tree object の id そのものを取得するにはどうしたらいいですか？

背景: `git commit-tree` が tree-ish ではなく、 tree object の id でないと動いてくれなかったので。




@yas さんや @metropolis さんの答えを参考にすると、自分が欲しかったものは次でした。

[code]

    #!/bin/sh
    
    if [ $# -ne 1 ]
    then
        echo "usage: $0 treeish" 1>&2
        exit 1
    fi
    
    treeish="$1"
    
    case $(git cat-file -t "${treeish}") in
        commit)
            git cat-file -p "${treeish}" |
                sed -n 1p |
                awk '{print $2}'
        ;;
        tree)
            git rev-parse "${treeish}"
        ;;
    esac
    
[/code]




`git cat-file` で出力できるようです。

[code]

    git cat-file -p HEAD
    
[/code]

