回答:
編集:JakubNarębskiはもっとgit-fuを持っています。次のはるかに単純なコマンドは完全に機能します。
git describe --tags
(または--tags
、注釈付きタグをチェックアウトした場合は、なし。私のタグは軽量なので、-tagsが必要です。)
元の答えは次のとおりです:
git describe --exact-match --tags $(git log -n1 --pretty='%h')
もっとgit-fuを持っている人はよりエレガントな解決策を持っているかもしれません...
これは、git-log
チェックアウトしたものからログを報告するという事実を利用します。%h
省略されたハッシュを出力します。次にgit describe --exact-match --tags
、そのコミットと完全に一致するタグ(軽量または注釈付き)を見つけます。
上記の$()
構文は、bashなどを使用していることを前提としています。
--exact-match
コメントの数秒前に回答を追加しました。それを削除しても、あいまいな入力から適切な情報を取得できることを知ってうれしいです。
git rev-parse HEAD
はgit log -n1 --pretty='%h'
... よりも優れたソリューションですが、なぜ単純にHEAD
(またはgit describe
デフォルトでHEAD として何も)記述できないのですか?
これは私のために働いた git describe --tags --abbrev=0
現在のHEADのすべてのタグを表示(またはコミット)
git tag --points-at HEAD
git describe
ある磁器のあなたは避けなければならないコマンドは、:
http://git-blame.blogspot.com/2013/06/checking-current-branch-programatically.html
代わりに、私は使用しました:
git name-rev --tags --name-only $(git rev-parse HEAD)
^0
は、タグに対応するコミットの末尾を出力します(たとえば、タグ1.0
が出力する場合1.0^0
)。Gitのみを出力する方法はありますか1.0
、またはこれにsedを使用する必要がありますか?
タグをチェックアウトすると、「切り離されたヘッド」と呼ばれるものが得られます。通常、GitのHEADコミットは、現在チェックアウトしているブランチへのポインターです。ただし、ローカルブランチ以外のもの(タグやリモートブランチなど)をチェックアウトすると、「切り離されたヘッド」が存在します-実際にはどのブランチにもいません。デタッチされたヘッド上では、コミットを行わないでください。
編集したくない場合は、タグをチェックアウトしても問題ありません。ファイルの内容を調べるだけの場合、またはタグからプロジェクトをビルドする場合は、コミットを行わない限りgit checkout my_tag
、ファイルを操作してもかまいません。ファイルの変更を開始する場合は、タグに基づいてブランチを作成する必要があります。
$ git checkout -b my_tag_branch my_tag
my_tag_branch
から始まる新しいブランチを作成しますmy_tag
。このブランチの変更をコミットしても安全です。
git describe
、あなたが(注釈付き)タグ、または上に正確である場合にタグ名を示すだろう<tag>-<n>-g<shortened sha-1>
そうでない場合は、<n>
コミットの数があるためです<tag>
。