126

そのため、git tagコマンドは現在の git タグを一覧表示します

tag1
tag2

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

tag1  blah blah
tag2  blah blah

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

4

8 に答える 8

165

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 ハッシュで始まります。

于 2012-01-09T23:26:40.103 に答える
62

git tagコマンドは未開発です。完全なタグの詳細やコミット履歴の順序のタグなど、多くのことが望まれますが、不足しています。

代わりにこれが好きです。これは、私が望むものを正確に提供しますが、からは取得できませんgit tag:

git log --oneline --decorate --tags --no-walk

これにより、タグが新しい順に色分けされて表示されます (完全なログの場合と同様)。そうすれば、タグが表示されるだけでなく、短縮されたハッシュとタグ コミットのコミット メッセージも表示されます。


次のようにgit tandにエイリアスしました。git tags

git config --global alias.tags "log --oneline --decorate --tags --no-walk"
git config --global alias.t "!git tags"

注: Gitは別のエイリアスからのエイリアスの呼び出しをサポートしていないため(これは残念です)、bashリダイレクトを使用する必要がありました。git t


コミットの日時を確認したい場合は、次を試してください。

git log --tags --no-walk --date=iso-local --pretty='%C(auto)%h %cd%d %s'

オプションで他の日付形式を使用したり--date、オプションで独自の好みに合わせて出力を完全に制御したり--prettyできます。どちらのオプションもgit-log Documentationで詳しく説明されています。

于 2014-09-20T20:23:35.633 に答える
16

注釈付きタグには独自の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^{}
于 2012-11-30T08:11:44.107 に答える
11

任意の種類の参照 (ブランチ、タグなど) によって参照される SHA1 を取得するには、次を使用しますgit rev-parse

git rev-parse tag1^0 tag2^0

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

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

于 2012-01-09T23:35:25.857 に答える
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でタグが指しているコミットを確認する方法の概要も参照してください。。

于 2012-09-28T16:11:03.850 に答える
3

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

于 2012-01-09T23:25:43.313 に答える