git tag
コマンドは、現在のgitタグをリストします
tag1
tag2
git tag -n
タグのメッセージを出力します
tag1 blah blah
tag2 blah blah
tag1とtag2のハッシュを取得する最良の方法は何ですか?
これはどう?
git show-ref --tags
git tag
コマンドは未開発です。完全なタグの詳細やコミット履歴の順序のタグのように、多くのことが望まれていますが、欠落しています。
私は代わりにこれが好きです、それは私が欲しいものを正確に提供しますが、git tag
からは取得できません:
git log --oneline --decorate --tags --no-walk
これにより、タグの非常に素敵な色分けされたビューが新しい順に表示されます(完全なログに表示されるように)。これにより、タグが表示されるだけでなく、短縮されたハッシュとタグコミットのコミットメッセージも表示されます。
次のようにgit t
およびgit tags
にエイリアスしました:
git config --global alias.tags "log --oneline --decorate --tags --no-walk"
git config --global alias.t "!git tags"
注:Gitとは異なり、git t
にはbashリダイレクトを使用する必要がありました別のエイリアスからのエイリアスの呼び出しをサポートしていません(これは残念です)。
コミット日時を確認したい場合は、次を試してください:
git log --tags --no-walk --date=iso-local --pretty='%C(auto)%h %cd%d %s'
--date
オプションで他の日付形式を使用できます。また、--pretty
オプションでの独自の好みに合わせて出力を完全に制御できます。両方のオプションは git-log Documentation に詳しく記載されています。
注釈付きタグには独自のSHA-1があるため、それらを逆参照する必要があります。ただし、軽量タグはすでにコミットを指しているため、逆参照できません。解決するには、両方をリストし、コミットオブジェクトをフィルタリングする必要があります。
git for-each-ref --sort -v:refname --format '%(objectname) %(objecttype) %(refname)
%(*objectname) %(*objecttype) %(*refname)' refs/tags | grep commit
軽量タグの結果:
589610a0114a375f1bff716dd308cf8df08571d3 commit refs/tags/1.4.9
e25952a74bf379783944bef9c4fcc60600cb764c commit refs/tags/1.4.8
19b1c2c96a9678837f57eac86cf3d22842731510 commit refs/tags/1.4.7
7208212a55c4a56af34da781a7f730d6ddd557a1 commit refs/tags/1.4.6
62ec20337a4125496bd4f56288f3283963153194 commit refs/tags/1.4.5
注釈付きタグの結果:
e2b2d6a172b76d44cb7b1ddb12ea5bfac9613a44 commit refs/tags/v2.11.0-rc3^{}
1310affe024fba407bff55dbe65cd6d670c8a32d commit refs/tags/v2.11.0-rc2^{}
3ab228137f980ff72dbdf5064a877d07bec76df9 commit refs/tags/v2.11.0-rc1^{}
1fe8f2cf461179c41f64efbd1dc0a9fb3b7a0fb1 commit refs/tags/v2.11.0-rc0^{}
454cb6bd52a4de614a3633e4f547af03d5c3b640 commit refs/tags/v2.11.0^{}
あらゆる種類の参照(ブランチ、タグ...)によって参照されるSHA1を取得するには、git rev-parse
を使用します。
git rev-parse tag1^0 tag2^0
完全なSHA1のみを別の行に出力します。 ^0
接尾辞は特別な構文です。これにより、注釈が付けられているかどうかに関係なく、タグが指すコミットのSHA1が出力されます。 (注釈付きタグは、メタデータとともにコミットへのポインタを含む独自の権利を持つオブジェクトです。タグに注釈が付けられていることがわかっていて、タグのSHA1が必要な場合は、^0
を省略します。)
もちろん、SHA1を受け入れるGitコマンドはタグも受け入れる必要があるため、これを行う必要はほとんどありません。
同様の質問がありましたが、(複数の)特定のタグのハッシュが必要でした。 「show-ref」がタグのリストを取得することがわかったので、これは仕事をします:
% git show-ref v3.4.0.13-ga v3.4.0.13-base
bfc7747c4cf67a4aacc71d7a40337d2c3f73a886 refs/tags/v3.4.0.13-base
79ba365e75a4f9cee074d25a605a26acb660b7de refs/tags/v3.4.0.13-ga
ただし、「git show」を使用したいくつかの実験の結果、次のコマンドが生成されました。
% git show --summary --oneline --decorate v3.4.0.13-ga v3.4.0.13-base
79ba365 (tag: v3.4.0.13-ga, rhins013a) commit message the first
bfc7747 (tag: v3.4.0.13-base) commit message the second
私は「show-ref」よりも「show」を使用する方がはるかに精通しているので、「show-ref」の方が覚えやすく、便利です。
Gitでタグが指すコミットを確認する方法 のニースの概要も参照してください。
タグには署名および/またはメッセージが必要です。軽量タグにはSHA1オブジェクトがなく、単なる参照です。それ以外の場合はgit show
。
git for-each-ref --format='%(if)%(*objectname)%(then)%(*objectname)%(else)%(objectname)%(end) %(refname)' refs/tags
これにより、タグのすべてのコミットのリストが表示されます。注釈付きタグは逆参照されます。感謝を送る こちら 。
anatoly techtonik post からコマンドを受け取り、タグ/コミットの見出しメッセージを追加し、Nice colsとしてフォーマットしました。
結果は、git tag -n
と同じ出力ですが、プレフィックスとしてコミットハッシュが使用されます。
git for-each-ref --format='%(if)%(*objectname)%(then)%(*objectname:short)%(else)%(objectname:short)%(end)|%(refname:short)|%(contents:subject)' refs/tags | column -t -s '|'
ショートハッシュではなくロングハッシュを使用する場合は、objectname:short
をobjectname
に置き換えます。