タグ付け

このドキュメントでは、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 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 tagHEAD が参照しているコミット上にタグを作成します。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 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 を学習する準備はできていますか?

この対話式チュートリアルを利用しましょう。

今すぐ始める