git tag
このドキュメントでは、Git におけるタグの概念と git tag
コマンドについて説明します。タグとは Git 履歴の特定の時点をポイントする ref です。タグは通常、マークが付いたバージョン リリース (v1.0.1 など) の履歴のある時点をキャプチャするのに使用します。
タグとは変更がないブランチのようなものです。ただ、ブランチとは違って作成後にコミット履歴が追加されることはありません。ブランチの詳細については、git branch
のページを参照してください。
このドキュメントでは、さまざまな種類のタグ、タグの作成方法、すべてのタグの一覧表示、タグの削除、タグの共有などについて取り上げます。
タグの作成
新しいタグを作成するには次のコマンドを実行します。
git tag <tagname>
を、タグが作成される時点のリポジトリの状態を示すセマンティック識別子に置換します。git tag v1.4
のようなバージョン番号を使うのが一般的なパターンです。Git では、注釈付きタグと軽量タグの、2 つの異なる種類のタグをサポートしています。先ほどのサンプルでは軽量タグを作成しました。軽量タグと注釈付きタグの違いは、タグに保存されるメタ データの量です。注釈付きタグはみんなで共有するもの、軽量タグは自分専用だと考えるとわかりやすいでしょう。注釈付きタグにはタグ付けプログラムの名前、メール、日付などのメタ データが保存されます。これらは公開リリースで重要になるデータです。軽量タグは本質的にはコミットの「ブックマーク」であり、コミットの名前とポインターに過ぎません。関連するコミットへのクイック リンクを作成するのに便利です。
注釈付きタグ
注釈付きタグは Git データベースに完全なオブジェクトとして保存されます。繰り返しになりますが、注釈付きタグにはタグ付けツールの名前、メール、日付などの追加のメタデータが保存されます。コミットとコミットメッセージ同様、注釈付きタグにはタグ付けメッセージがあります。また、セキュリティ上の理由により、注釈付きタグは GNU Privacy Guard (GPG) による署名と検証を受けることができます。Git のタグ付けでは軽量タグよりも注釈付きタグを優先的に使って関連するすべてのメタデータを保持するようにすると良いでしょう。
git tag -a v1.4
このコマンドを実行すると、v1.4
で指定した新しい注釈付きタグを作成します。その後、設定済みのデフォルトのテキスト エディターが起動し、追加のメタ データを入力するよう求められます。
git tag -a v1.4 -m "my version 1.4"
このコマンドを実行すると、1 つ前の呼び出しと同じような結果が得られますが、このバージョンのコマンドでは -m
オプションとメッセージが渡されています。これは git commit -m
と同じように便利な方法で、即座に新しいタグを作成して、-m
オプションを使って渡されるメッセージを表示するために、ローカルのテキスト エディターを起動しません。
関連資料
Git チートシート
ソリューションを見る
Bitbucket Cloud での Git の使用方法についてのチュートリアルです。
軽量タグ
git tag v1.4-lw
このコマンドを実行すると v1.4-lw
で指定した軽量タグを作成します。軽量タグは -a
、-s
、または -m
オプションを指定しなくても作成されます。軽量タグでは新しいタグ チェックサムが作成されて、プロジェクトのリポジトリの .git/
ディレクトリにそのチェックサムが保存されます。
タグの一覧表示
リポジトリに保存されたタグを一覧表示するには以下を実行します。
git tag
タグの一覧が出力されます。
v0.10.0
v0.10.0-rc1
v0.11.0
v0.11.0-rc1
v0.11.1
v0.11.2
v0.12.0
v0.12.0-rc1
v0.12.1
v0.12.2
v0.13.0
v0.13.0-rc1
v0.13.0-rc2
タグの一覧を絞り込むには、ワイルド カード表現を使って -l
を渡します。
$ git tag -l *-rc*
v0.10.0-rc1
v0.11.0-rc1
v0.12.0-rc1
v0.13.0-rc1
v0.13.0-rc2
v0.14.0-rc1
v0.9.0-rc1
v15.0.0-rc.1
v15.0.0-rc.2
v15.4.0-rc.3
上のサンプルでは -l
オプションとワイルドカード表現 -rc
を使って -rc
のプレフィックスが付いたすべてのタグの一覧を返しています。これは通常、リリース候補を特定するために使用されます。
古いコミットへのタグ付け
前のタグ付けのサンプルでは暗黙コマンドの操作を、実例を挙げて説明しました。デフォルトでは、git tag
は HEAD
が参照しているコミット上にタグを作成します。git tag
を特定のコミットの ref としても渡せます。この場合、HEAD
をデフォルトにする代わりに、渡されたコミットにタグを付けます。古いコミットの一覧を集めるには、git log
コマンドを実行します。
$ git log --pretty=oneline
15027957951b64cf874c3557a0f3547bd83b3ff6 Merge branch 'feature'
a6b4c97498bd301d84096da251c98a07c7723e65 add update method for thing
0d52aaab4479697da7686c15f77a3d64d9165190 one more thing
6d52a271eda8725415634dd79daabbc4d9b6008e Merge branch 'experiment'
git log
を実行するとコミットの一覧が出力されます。このサンプルでは一番上のコミット Merge branch 'feature'
を新しいタグとして使います。Git に渡すにはコミット SHA ハッシュを参照する必要があります。
git tag -a v1.2 15027957951b64cf874c3557a0f3547bd83b3ff6
上の git tag
呼び出しを実行すると、前の git log
サンプルで選択したコミット用に、v1.2
で指定した新しい注釈付きタグが作成されます。
古いタグの再タグ付けと置換
既存のタグと同じ識別子を使ってタグを作成すると、以下のようなエラーが表示されます。
fatal: tag 'v0.4' already exists
また、既存のタグ識別子を使って以前のコミットにタグを付けようとしても同じエラーが表示されます。
既存のタグを更新する必要がある場合は、-f FORCE
オプションを使う必要があります。
git tag -a -f v1.4 15027957951b64cf874c3557a0f3547bd83b3ff6
上のコマンドを実行すると、15027957951b64cf874c3557a0f3547bd83b3ff6
コミットを v1.4
のタグ識別子にマッピングします。v1.4
タグの既存のコンテンツはすべて上書きされます。
共有:タグをリモートにプッシュする
タグの共有はブランチのプッシュと似ています。デフォルトでは、git push
でタグはプッシュされません。タグは明示的に git push
に渡す必要があります。
$ git push origin v1.4
Counting objects: 14, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (12/12), done.
Writing objects: 100% (14/14), 2.05 KiB | 0 bytes/s, done.
Total 14 (delta 3), reused 0 (delta 0)
To git@bitbucket.com:atlasbro/gittagdocs.git
* [new tag] v1.4 -> v1.4
複数のタグを同時にプッシュするには --tags
オプションを git push
コマンドに渡します。別のユーザーがリポジトリをクローンまたはプルすると、新しいタグを受け取ります。
タグのチェックアウト
git checkout コマンドを使うと、タグのリポジトリの状態を表示できます。
git checkout v1.4
上のコマンドでは v1.4
タグをチェックアウトしています。これによってリポジトリは detached HEAD
状態になります。つまり、どの変更もタグを更新しないということです。これによって分離した新たなコミットが作成されます。新たに分離したコミットはどのブランチにも属さず、直接到達できるのはコミット SHA ハッシュからだけです。そのため、detached HEAD
状態で変更を加えたときは毎回新しいブランチを作成することが推奨されます。
タグの削除
タグの削除はいたってシンプルな操作です。-d
オプションとタグ識別子を git tag
に渡すと、指定したタグが削除されます。
$ git tag
v1
v2
v3
$ git tag -d v1
$ git tag
v2
v3
このサンプルでは git tag
を実行して v1、v2、v3 のタグ一覧を表示しています。その後、git tag -d v1
を実行して v1 タグを削除しています。
要約
まとめると、タグ付けとは Git リポジトリのスナップショットを作成するための追加のメカニズムということになります。タグ付けは従来、ソフトウェア リリースのサイクルに対応するセマンティック バージョン番号識別タグを作成するために使用されて来ました。git tag
は、作成、修正、削除など、タグの操作の基本となるコマンドです。タグには注釈付きと軽量の 2 種類があります。注釈付きタグには、タグに関する重要なメタデータを追加で保存できるため、ほとんどのケースに適しています。このドキュメントで取り上げた追加の Git コマンドは git push と git checkout です。これらのコマンドの詳しい使い方については、それぞれのページを参照してください。
この記事を共有する
次のトピック
おすすめコンテンツ
次のリソースをブックマークして、DevOps チームのタイプに関する詳細や、アトラシアンの DevOps についての継続的な更新をご覧ください。