487

リポジトリに注釈のないタグがたくさんあり、それらがどのコミットを指しているのかを調べたいと思います。タグとそのコミットSHAを一覧表示するだけのコマンドはありますか?タグをチェックしてHEADを見るのは、私には少し面倒なようです。

アップデート

回答を読んだ後、私が実際に望んでいたのは、タグに至るまでの履歴を見るだけでgit log <tagname>十分であることに気づきました。

回答としてマークされた回答は、タグとそのコミットのリストを取得するのに役立ちます。これは私が尋ねたものです。シェルハッカーを少し使用すれば、それらをSHA+Commitメッセージに変換できると確信しています。

4

21 に答える 21

433

これを行う1つの方法は、を使用することgit rev-listです。以下は、タグが指すコミットを出力します。

$ git rev-list -n 1 $TAG

注これは、注釈付きタグと注釈なしタグの両方で機能します

~/.gitconfig頻繁に使用する場合は、エイリアスとして追加できます。

[alias]
  tagcommit = rev-list -n 1

そしてそれを次のように呼びます:

$ git tagcommit $TAG

考えられる落とし穴:ローカルチェックアウトまたは同じタグ名のブランチがある場合、このソリューションでは「警告:refname'myTag'はあいまいです」と表示される場合があります。その場合は、具体性を高めてみてください。例:

$ git rev-list -n 1 tags/$TAG
于 2009-12-07T20:07:27.177 に答える
272

警告これは注釈なしのタグでのみ機能するため、一般的なケースで機能する受け入れられた回答を使用する方が安全ですhttps://stackoverflow.com/a/1862542/1586965

git show-ref --tags

たとえばgit show-ref --abbrev=7 --tags、次のようなものが表示されます。

f727215 refs/tags/v2.16.0
56072ac refs/tags/v2.17.0
b670805 refs/tags/v2.17.1
250ed01 refs/tags/v2.17.2
于 2009-12-07T22:01:50.187 に答える
117

使うだけgit show <tag>

ただし、コミット差分もダンプします。これらの差分を省略するには、 を使用しますgit log -1 <tag>。(@DolphinDream と @demisx に感謝します!)

于 2014-07-28T11:02:47.060 に答える
49

イゴール・ゼヴァカより:

概要

ほぼ同じように受け入れられるが異なる回答が約 4 つあるため、タグをスキンするさまざまな方法をすべてまとめます。

  1. git rev-list -1 $TAG(答え)。git rev-listにつながるコミットを出力しますが、コミットの$TAGSHA1git logのみを表示します。は-1、出力をそれが指すコミットに制限します。

  2. git show-ref --tags(回答) すべてのタグ (ローカルおよびリモートから取得) とその SHA1 が表示されます。

  3. git show-ref $TAG( answer ) は、タグとそのパスを SHA1 とともに表示します。

  4. git rev-parse $TAG( answer ) は、注釈のないタグの SHA1 を表示します。

  5. git rev-parse --verify $TAG^{commit}( answer ) は、注釈付きタグと注釈なしタグの両方の SHA1 を表示します。Windows での使用git rev-parse --verify %TAG%^^^^{commit}(4 つのハット)。

  6. cat .git/refs/tags/*またはcat .git/packed-refs( answer ) タグがローカルかリモートからフェッチされたかによって異なります。

于 2014-06-28T17:06:50.103 に答える
42

注釈付きタグの場合git show-ref TAG、それが指すコミットのハッシュではなく、タグのハッシュを表示します。

git show-ref --dereference TAGさらに、追加された で指し示されているコミットを示してい^{}ます。

于 2010-08-24T06:44:41.737 に答える
35

使用する

git rev-parse --verify <tag>^{commit}

(これは、注釈付きタグに対してもコミットのSHA-1を返します)。


git show-ref <tag><tag>注釈が付いていない場合にも機能します。そして、常にありますgit for-each-ref(詳細についてはドキュメントを参照してください)。

于 2009-12-07T23:54:41.690 に答える
15

これはどう:

git log -1 $TAGNAME

また

git log -1 origin/$TAGNAME
于 2014-06-28T11:53:50.767 に答える
9

「正しい」方法も知りたいのですが、それまでの間、これを行うことができます:

git show mytag | head -1    
于 2009-12-07T19:51:13.023 に答える
9

Git-2 後の短い回答

この質問がかなり前から出回っていることは知っています。CB Bailey の答えは 100% 正しいです。git show-ref --tags --abbrev

を使用しているので、私はこれが好きgit tagです:

git tag --list --format '%(refname:short) %(objectname:short)'

単純。短い。

git taglistPSは、次のコマンドのようにエイリアスします。

git config --global alias.taglist "tag --list --format '%(refname:short) %(objectname:short)'"
于 2020-03-25T11:09:58.497 に答える
5

タグがどこを指しているのかをより理解しやすい形で取得することもできます

git log --graph |git name-rev --stdin --tags |less

で探しているタグまでスクロールします/

よりコンパクトなビュー ( --pretty=oneline) とすべてのヘッド ( -a) も役立ちます。

git log -a --pretty=oneline --graph |git name-rev --stdin --tags |less

少し恐ろしく見えますが、必要に応じてエイリアスを作成することもできます~/.gitconfig

~/.gitconfig

[alias]
ls-tags = !git log -a --pretty=oneline --graph |git name-rev --stdin --tags |less
于 2012-06-14T13:04:15.117 に答える
3

これにはファイル名は表示されませんが、少なくともリポジトリの雰囲気をつかむことができます。

cat .git/refs/tags/*

そのディレクトリ内の各ファイルには、コミットを指すコミット SHA が含まれています。

于 2009-12-07T19:50:48.173 に答える
2

これにより、現在のSHA1ハッシュが取得されます

短縮されたコミット ハッシュ

git show <tag> --format="%h" --> 42e646e

コミットハッシュ

git show <tag> --format="%H" --> 42e646ea3483e156c58cf68925545fffaf4fb280
于 2016-03-29T13:47:52.200 に答える
2

私も正しい方法を知りたいのですが、いつでも次のいずれかを覗くことができます:

$ cat .git/packed-refs 

また:

$ cat .git/refs/tags/*
于 2009-12-07T19:51:29.060 に答える