Close

git tag

このドキュメントでは、Git におけるタグの概念と git tag コマンドについて説明します。タグとは Git 履歴の特定の時点をポイントする ref です。タグは通常、マークが付いたバージョン リリース (v1.0.1 など) の履歴のある時点をキャプチャするのに使用します。タグとは変更がないブランチのようなものです。ただ、ブランチとは違って作成後にコミット履歴が追加されることはありません。ブランチの詳細については、git branch のページを参照してください。このドキュメントでは、さまざまな種類のタグ、タグの作成方法、すべてのタグの一覧表示、タグの削除、タグの共有などについて取り上げます。


タグの作成


新しいタグを作成するには次のコマンドを実行します。

git tag <tagname>

を、タグが作成される時点のリポジトリの状態を示すセマンティック識別子に置換します。git tag v1.4 のようなバージョン番号を使うのが一般的なパターンです。Git では、注釈付きタグと軽量タグの、2 つの異なる種類のタグをサポートしています。先ほどのサンプルでは軽量タグを作成しました。軽量タグと注釈付きタグの違いは、タグに保存されるメタ データの量です。注釈付きタグはみんなで共有するもの、軽量タグは自分専用だと考えるとわかりやすいでしょう。注釈付きタグにはタグ付けプログラムの名前、メール、日付などのメタ データが保存されます。これらは公開リリースで重要になるデータです。軽量タグは本質的にはコミットの「ブックマーク」であり、コミットの名前とポインターに過ぎません。関連するコミットへのクイック リンクを作成するのに便利です。

Annotated tags


注釈付きタグは 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 のロゴ
関連資料

Git チートシート

Bitbucket ロゴ
ソリューションを見る

Bitbucket Cloud での Git の使用方法についてのチュートリアルです。

Lightweight tags


git tag v1.4-lw

このコマンドを実行すると v1.4-lw で指定した軽量タグを作成します。軽量タグは -a-s、または -m オプションを指定しなくても作成されます。軽量タグでは新しいタグ チェックサムが作成されて、プロジェクトのリポジトリの .git/ ディレクトリにそのチェックサムが保存されます。

Listing tags


リポジトリに保存されたタグを一覧表示するには以下を実行します。

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 のプレフィックスが付いたすべてのタグの一覧を返しています。これは通常、リリース候補を特定するために使用されます。

Tagging old commits


前のタグ付けのサンプルでは暗黙コマンドの操作を、実例を挙げて説明しました。デフォルトでは、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 で指定した新しい注釈付きタグが作成されます。

ReTagging/Replacing old tags


既存のタグと同じ識別子を使ってタグを作成すると、以下のようなエラーが表示されます。

fatal: tag 'v0.4' already exists

また、既存のタグ識別子を使って以前のコミットにタグを付けようとしても同じエラーが表示されます。

既存のタグを更新する必要がある場合は、-f FORCE オプションを使う必要があります。

git tag -a -f v1.4 15027957951b64cf874c3557a0f3547bd83b3ff6

上のコマンドを実行すると、15027957951b64cf874c3557a0f3547bd83b3ff6 コミットを v1.4 のタグ識別子にマッピングします。v1.4 タグの既存のコンテンツはすべて上書きされます。

Sharing: Pushing tags to remote


タグの共有はブランチのプッシュと似ています。デフォルトでは、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 コマンドに渡します。別のユーザーがリポジトリをクローンまたはプルすると、新しいタグを受け取ります。

Checking out tags


You can view the state of a repo at a tag by using the git checkout command.

git checkout v1.4

上のコマンドでは v1.4 タグをチェックアウトしています。これによってリポジトリは detached HEAD 状態になります。つまり、どの変更もタグを更新しないということです。これによって分離した新たなコミットが作成されます。新たに分離したコミットはどのブランチにも属さず、直接到達できるのはコミット SHA ハッシュからだけです。そのため、detached HEAD 状態で変更を加えたときは毎回新しいブランチを作成することが推奨されます。

Deleting tags


タグの削除はいたってシンプルな操作です。-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 タグを削除しています。

要約


To recap, Tagging is an additional mechanism used to create a snap shot of a Git repo. Tagging is traditionally used to create semantic version number identifier tags that correspond to software release cycles. The git tag command is the primary driver of tag: creation, modification and deletion. There are two types of tags; annotated and lightweight. Annotated tags are generally the better practices as they store additional valuable meta data about the tag. Additional Git commands covered in this document were git push, and git checkout. Visit their corresponding pages for discussion on their extended use.


この記事を共有する
次のトピック

おすすめコンテンツ

次のリソースをブックマークして、DevOps チームのタイプに関する詳細や、アトラシアンの DevOps についての継続的な更新をご覧ください。

一面のツールを使ってコラボレーションしている人たち

Bitbucket ブログ

DevOps のイラスト

DevOps ラーニング パス

Demo Den アトラシアン・エキスパートによる機能デモ

Bitbucket Cloud が、Atlassian Open DevOps とどのように連携するか

DevOps ニュースレター購読

Thank you for signing up