以下を使用して、特定のコミットハッシュのコミットメッセージを取得しています。
hash='b55da97'
git log --pretty=oneline ${hash} | grep "${hash}" | awk '{ print $2 }'
ただし、これらは非常に非効率的です。これを行うためのより賢いまたはより安い方法はありますか、それとも私はgreppingとawkingに行き詰まっていますか?
git log
(特に)取る:
-n num
表示されるコミットの数を制限するには、1を選択します(num
が9以下の場合は、-num
、したがって、-1
、略して)--pretty=format:string with directives
ログ出力形式を変更します。 %s
ディレクティブは、コミット「件名」を取得します。これは、oneline
でも取得できます。したがって:git log -n 1 --pretty=format:%s $hash
(またはgit log -1 --pretty=format:%s
)ここでトリックを行います。
フォーマットディレクティブの完全なリストについては、「PRETTY FORMATS」の下にある git log documentation を参照してください(半分ほど下)。
実際に必要なコミットメッセージの量に応じて、使用できるかなりの形式の指定子がいくつかあります。
· %s: subject
· %f: sanitized subject line, suitable for a filename
· %b: body
· %B: raw body (unwrapped subject and body)
したがって、git log -1 --pretty=format:%b <hash>
のようなもの、または他の指定子の1つを使用します(%s
は、おそらく現在実行していることにより近いと思います)。 -1
は、履歴ツリーをたどるのではなく、git log
を1つのコミットのみに制限します。
私は重要なものを1行にダンプするのが好きです...これは私が使用するもので、このページの他の答えを基にしています:
IT=$(git log -1 --pretty=format:"%an, %s, %b, %ai" $*)
echo "$IT"
jdoe, WORK1766032 - Added templating engine, WIP, 2013-08-15 14:25:59 +0000
ここに記載されているよりもさらに短い答えは
git log --pretty=oneline {your_hash} | grep {your_hash}
これはそれを短くするかもしれません
git log --pretty=oneline ${hash} | awk '$0~var {print $2}' var="${hash}"