私はリポジトリにアノテーションの付いていないタグがたくさんあるので、それらがどのコミットを指しているのかを調べたいと思います。タグとそのコミットSHAをリストするだけのコマンドはありますか?タグをチェックアウトしてHEADを見るのは、ちょっと面倒です。
レスポンスを調べた後、私が実際に望んでいたのは単にタグに至るまでの履歴を見ることであり、git log <tagname>
で十分であることに気付きました。
Answerとマークされている回答は、タグとそのコミットのリストを取得するのに役立ちます。これが私の質問です。ちょっとしたシェルハッカーで、それらをSHA +コミットメッセージに変換することは可能です。
これを行う1つの方法はgit rev-list
を使用することです。以下は、タグが指すコミットを出力します。
$ git rev-list -n 1 $TAG
よく使うのであれば、~/.gitconfig
にエイリアスとして追加できます。
[alias]
tagcommit = rev-list -n 1
そしてそれを呼び出します。
$ git tagcommit $TAG
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
git show <tag>
を使うだけ
ただし、コミット差分もダンプされます。これらの差分を省略するには、git log -1 <tag>
を使用します。 (@DolphinDreamと@demisxに感謝します。)
私のリポジトリでは、git show-ref TAG
はタグのハッシュを示していますが、それが指すコミットのハッシュではありません。
git show-ref --dereference TAG
は、さらに、指示されているコミットを示します。
つかいます
git rev-parse --verify <tag>^{commit}
(これは注釈付きタグでもコミットのSHA-1を返します)。
git show-ref <tag>
に注釈が付いていなくても<tag>
は機能します。そしてgit for-each-ref
が常にあります(詳細はドキュメントを参照してください)。
から Igor Zevaka :
約4つの同じくらい許容できるけれども異なった答えがあるので、私はタグを皮をむくためにすべての異なった方法をまとめます。
git rev-list -1 $TAG
( answer ) git rev-list
は、$TAG
と同様のgit log
に至るコミットを出力しますが、コミットのSHA1のみを表示します。 -1
は、出力をそれが指すコミットに制限します。
git show-ref --tags
( answer )は、すべてのタグ(ローカルおよびリモートからフェッチされたもの)とそれらのSHA1を表示します。
git show-ref $TAG
( answer )はSHA1と共にタグとそのパスを表示します。
git rev-parse $TAG
( answer )は、注釈なしタグのSHA1を表示します。
git rev-parse --verify $TAG^{commit}
( answer )は、注釈付きタグと注釈なしタグの両方のSHA1を表示します。 Windowsではgit rev-parse --verify %TAG%^^^^{commit}
(4つの帽子)を使用してください。
タグがローカルであるかリモートからフェッチされるかに応じて、cat .git/refs/tags/*
またはcat .git/packed-refs
( answer )。
これはどう:
git log -1 $TAGNAME
OR
git log -1 Origin/$TAGNAME
タグが参照するコミットのsha/hashを取得するには(タグのshaではなく):
git rev-list -1 <tag>
これはかなり古いものですが、コミット付きのタグを一覧表示するために見つけた素晴らしい機能を指摘することにしました。
git log --decorate=full
コミットで終了/開始するブランチとコミットのタグが表示されます。
私も「正しい」方法を知りたいのですが、それまでの間、あなたはこれをすることができます:
git show mytag | head -1
タグがどこを指しているのかをよりわかりやすく理解することもできます。
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
これはあなたに現在のSHA1ハッシュを取得します
省略されたコミットハッシュ
git show <tag> --format="%h" --> 42e646e
ハッシュをコミット
git show <tag> --format="%H" --> 42e646ea3483e156c58cf68925545fffaf4fb280
私も知りたいのですが正しい方法しかし、あなたはいつでもどちらかを覗くことができます:
$ cat .git/packed-refs
または
$ cat .git/refs/tags/*
SOMETAGタグの詳細(tagger、dateなど)、それが指すコミットのハッシュ、およびコミットに関する少しの情報がありますが、完全な差分は含まれていません。
git show --name-status SOMETAG
出力例
tag SOMETAG
Tagger: ....
Date: Thu Jan 26 17:40:53 2017 +0100
.... tag message .......
commit 9f00ce27c924c7e972e96be7392918b826a3fad9
Author: .............
Date: Thu Jan 26 17:38:35 2017 +0100
.... commit message .......
..... list of changed files with their change-status (like git log --name-status) .....
gitメーリングリスト から、タグ付けされたタグを自動的に間接参照しながらタグのコミットハッシュのリストを取得する方法は次のとおりです。
git for-each-ref --format='%(if)%(*objectname)%(then)%(*objectname)%(else)%(objectname)%(end) %(refname)' refs/tags
これはファイル名を表示しません、しかし少なくともあなたはリポジトリの感覚を得ます。
cat .git/refs/tags/*
そのディレクトリ内の各ファイルには、コミットを指すコミットSHAが含まれています。
ですから、私はたくさんのリリースフォルダを持っています。そこでは、それらのフォルダはdev、qa、masterブランチのいずれか、あるいは本番リリース、タグからチェックアウトされています。注釈付きかどうか。私はターゲットフォルダを調べてフォームに答えを返すスクリプトを持っています - 。問題は、異なるバージョンのgitがタグのチェックアウトに対して異なるステータスを返すことです。
それで私はgit show-ref --tags
がアノテーションを付けられたタグを除いて最初に働いたのを見つけました。ただし、-dを追加すると、タグ用に1つ、アノテーション用にもう1つのタグのリストに別のエントリが追加されました(アノテーションコミットは^ {}として識別され、sedから削除されました)。
だから、これが私のスクリプトの核心です。
REPO=`git --git-dir=${TARGET} remote show Origin -n | \
grep "Fetch URL:" | \
sed -E "s/^.*\/(.*)$/\1/" | \
sed "s/.git$//"`
TAG=`git --git-dir=${TARGET} show-ref -d --tags | \
grep \`git --git-dir=${TARGET} show --quiet --format=format:%H HEAD\` | \
cut -d\ -f2 | \
cut -d/ -f3 | \
sed "s/\^{}$//"`
if [ "${TAG}" == "" ] ; then
BRANCH=`git --git-dir=${TARGET} show-ref --heads | \
grep \`git --git-dir=${TARGET} show --quiet --format=format:%H HEAD\` | \
cut -d\ -f2 | \
cut -d/ -f3`
TAG=${BRANCH}
fi
以下が使えます、コミットハッシュを与えますgit show -s --format=%H <tag>^{commit}
短縮コミットハッシュが必要な場合は、git show -s --format=%h <tag>^{commit}