Gitタグリスト、コミットsha1ハッシュを表示


101

したがって、git tagコマンドは現在のgitタグをリストします

tag1
tag2

git tag -n タグのメッセージを出力します

tag1  blah blah
tag2  blah blah

tag1とtag2のハッシュを取得する最良の方法は何ですか?


1
私が別に尋ねることを検討する質問ではありませんが、なぜgit tag-nまたは他のオプション...)が最初にコミットハッシュを表示しないのか疑問に思います。人々がどのようなソリューションを考え出すかを見るのは良いことですが、これは利用可能なオプションの設計上の欠陥だと思います。
andreee

回答:


142

TagオブジェクトのSHA1ハッシュでgitタグを取得するには、次のコマンドを実行します。

git show-ref --tags

出力は次のようになります。

0e76920bea4381cfc676825f3143fdd5fcf8c21f refs/tags/1.0.0
5ce9639ead3a54bd1cc062963804e5bcfcfe1e83 refs/tags/1.1.0
591eceaf92f99f69ea402c4ca639605e60963ee6 refs/tags/1.2.0
40414f41d0fb89f7a0d2f17736a906943c05acc9 refs/tags/1.3.0

各行はタグのSHA1ハッシュで、その後に接頭辞が付いたタグ名が続きrefs/tags/ます。

タグオブジェクトの代わりに、コミットのSHA1ハッシュが必要な場合は、次のコマンドを実行できます。

git show-ref --tags -d

これにより、次のような出力が生成されます。

0e76920bea4381cfc676825f3143fdd5fcf8c21f refs/tags/1.0.0
3e233dd8080617685992dc6346f739a6f6396aae refs/tags/1.0.0^{}
5ce9639ead3a54bd1cc062963804e5bcfcfe1e83 refs/tags/1.1.0
09173980152a7ed63d455829553448ece76c6fdc refs/tags/1.1.0^{}
591eceaf92f99f69ea402c4ca639605e60963ee6 refs/tags/1.2.0
56d803caaa8a93a040b7be0b8a36abdc4ce8c509 refs/tags/1.2.0^{}
40414f41d0fb89f7a0d2f17736a906943c05acc9 refs/tags/1.3.0
1bdf628a70fda7a0d840c52f3abce54b1c6b0130 refs/tags/1.3.0^{}

^{}タグが指す実際のコミットのSHA1ハッシュで始まる行。


7
これは、軽量タグと注釈付きタグを区別しないことに注意してください。軽量タグの場合はコミットが表示され、注釈付きタグの場合はタグオブジェクト自体のハッシュが表示されます。
リリーバラード

20
参照解除された参照を持つタグのリストを表示するには(注釈付きタグの場合)、を使用しますgit show-ref --tags -d。逆参照されたタグは^{}。で後置されます。
S.クリストファーエリセン2012年

49

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に詳しく記載されています


2
OPが要求したものではありませんが(コミットsha1ハッシュを表示)、コミットメッセージも便利な場合があるため、非常に便利です。私からの+1。
Stelios Adamantidis 2017

2
@nealmcb git logは強力です!あなたはそれをあなたが望むものを正確に示すようにすることができます。お試しくださいgit log --tags --no-walk --date=iso-local --pretty='%C(auto)%h %cd%d %s'。他の日付形式も可能です。ただ見上げる--dateヘルプページで。このオプションを含めるように回答を更新しました。
ADTC 2017年

1
@SteliosAdamantidis実は私の答えは与え略し SHA1ハッシュ(最初の7文字)を、そしてあなたはフルレングスのハッシュをしたい場合、あなたはいつもとそれを修正することができる--pretty%H。+1をありがとう:)
ADTC 2017年

15

注釈付きタグには独自の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^{}

を使用git log --tags --oneline --no-walkすると、注釈付きタグも自動的に遅延されます。:)
ADTC 2017年

11

あらゆる種類の参照(ブランチ、タグ...)によって参照されるSHA1を取得するには、以下を使用しますgit rev-parse

git rev-parse tag1^0 tag2^0

完全なSHA1のみを別々の行に出力します。^0サフィックスは、これはそれが注釈を付けていますか、タグによって指されるかコミットのSHA1を印刷することを確実にするために、特別な構文です。(注釈付きタグは、それ自体がオブジェクトであり、メタデータとともにコミットへのポインターが含まれています。タグが注釈付きであることがわかっていて、タグのSHA1が必要な場合は、単に^0

もちろん、SHA1を受け入れるGitコマンドはタグも受け入れる必要があるため、これを行う必要はあまりありません。


ここでの最良の回答、@ Jefromiに感謝します。Windows cmdシェルでは、^を使用するすべてのgitコマンドを引用符で囲む必要があることに注意してください:例git rev-parse "tag1 ^ 0" "tag2 ^ 0"。
ヨーヨー、2014年

8

同様の質問がありましたが、(いくつかの)特定のタグのハッシュが必要でした。「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」の方が使い慣れているので、後者は覚えやすく、役立つと思います。

Gitでタグが指すコミットを確認するにどうすればいいですか?


3

タグは署名またはメッセージ送信する必要があります。軽量タグはSHA1オブジェクトを持たず、単なる参照です。それ以外の場合は試してくださいgit show


3
 git for-each-ref --format='%(if)%(*objectname)%(then)%(*objectname)%(else)%(objectname)%(end) %(refname)' refs/tags

これにより、タグのすべてのコミットのリストが表示されます。注釈付きタグは逆参照されます。ここに感謝を送ります


素晴らしいソリューション。完全な参照名の代わりにタグ名のみを使用する場合は、の%(refname:short)代わりに使用を変更できます%(refname)
Radon8472

2

私はanatoly techtonikの投稿からコマンドを取り、タグ/コミットのヘッドラインメッセージを追加し、素敵なcolsとしてフォーマットしました。

結果は同じですgit tag -nが、プリフィックスとしてcommit-hashが付いた出力です。

git for-each-ref --format='%(if)%(*objectname)%(then)%(*objectname:short)%(else)%(objectname:short)%(end)|%(refname:short)|%(contents:subject)' refs/tags | column -t -s '|'

あなたの代わりに短期の長いハッシュを持っているしたい場合は、交換してくださいyust objectname:shortobjectname

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.