git tagコマンド完全理解。タグやタグ付けとは何か?|メリット・デメリットや注意点、使い方を実例で解説(初心者向け、わかりやすい)

git-prograshi(プロぐらし)-kv git/github
記事内に広告が含まれていることがあります。

Gitにはコミットにタグ(tag)付けする機能が備わっています。使わなくてもプロジェクトを進めることはできますが、タグを使うとことで管理しやすくなるといったメリットがあります。

ここでは、git tagコマンドでタグを使うメリットや実際の使い方、注意点について実例を踏まえて解説しています。

リモートレポジトリとローカルレポジトリのタグのやりとりについてもまとめています。


  1. タグ付けとは何か?
  2. タグを使うメリット&メリットの実例
    1. 特定のコミットが目立つ
    2. タグの一覧を参照できる
    3. タグでコミットを参照できる
    4. Githubでタグを簡単に参照できる
    5. リモートとローカルレポジトリでタグを使い分けられる
    6. 1つのコミットに複数のタグを設定できる
  3. タグを使う上でのデメリットと注意点
    1. git pushだけではタグが送信されない
    2. タグ名に使えない文字がある
    3. タグ名を直接変更(編集)するコマンドはない
    4. 同じタグ名は使えない
  4. タグ名の設定方法
    1. 現在のブランチの最新のコミットにタグをつける方法
    2. 指定したコミットにタグをつける方法
    3. 指定したブランチの最新のコミットにタグをつける方法
  5. 設定したタグの一覧を参照する
    1. git tag(引数なし)
    2. git tag –column
    3. git tag -l “パターン”
    4. git tag -n
    5. git tag -n "パターン"
  6. 注釈をつけたタグを設定する方法
    1. -aオプションの意味
    2. 注釈を設定する方法
    3. エディタを起動する場合
    4. コマンドライン上で直接注釈を入力する。「-a」と「-m」オプションを使う
    5. コマンドライン上で直接注釈を入力する。「-am」オプションを使う
    6. 注釈を変更する方法
  7. タグの削除(ローカルレポジトリのタグの場合)
  8. タグの削除(リモートレポジトリのタグの場合)
    1. リモートレポジトリのタグの削除方法
    2. 色々な記述
    3. 実例
    4. 複数のタグをまとて削除する
  9. タグ名の変更
    1. タグ名を別の名前に変える
    2. 既にあるタグ名を他のコミットに付け替える
  10. リモートレポジトリにタグをプッシュ(反映)する方法
    1. すべてのタグをプッシュする方法
    2. 指定したタグのみをプッシュする方法
    3. 注意点:エラー対処法
    4. ローカルレポジトリの重複しているタグを削除する
    5. ローカルレポジトリの重複しているタグ名を変更する
    6. リモートレポジトリのタグを削除する

タグ付けとは何か?

そもそもGitにおけるタグ付けとは何かというと、特定のコミットに対して、目印となる好きな名前を付けられることです。

よく使われるのはバージョン管理などです。このコミットがv1.0の始まり、このコミットがv2.0の始まりといった節目のコミットにタグ付けをすることで、対象のコミットをとても簡単に見つけ出せるようになります。

もちろんバージョン情報以外にも好きなタグ名をセットできます。


タグを使うメリット&メリットの実例

Gitを使うメリットは特定のコミットを参照するのに非常に役立ちます。

特定のコミットが目立つ

git logでコミット履歴を参照したときに、タグ付けしてある場合、対象のコミットが非常にわかりやすくなります。

実例

$ git log --oneline
0701d9d (HEAD -> aa, tag: v3.0.1) [U]docker-compose add webpack port 3035
a90d4ef [U]content-security-policy(CSP) enable webpack-dev-server
6adca49 (origin/aa) [A]destroyメソッド & Modal追加
61d3b4b (tag: v3.0) [A]ClientEdit.vue
00093d1 [F]ClientNewからClientForm.vueを切り出し
a84cfc5 (tag: v2.1) [A]ClientNew.vue
718eea7 (tag: v2.0) [A]Client.vue
ca60d8a [A]Clients.vue & Top.vue
9861efe (tag: v1.2) [A]vue-router

タグが付いているものは「tag: タグ名」として表示されます。

どのコミットが、v1.2, v2.0, v2.1, v.3.0なのかが一瞬でわかります。


タグの一覧を参照できる

プロジェクトの中でどのようなタグが設定されているか一覧を表示することができます。

$ git tag
v1.2
v2.0
v2.1
v3.0
v3.0.1

コミットメッセージや注釈(設定したある場合のみ)も合わせて一覧表示することもできます。

$ git tag -n
v1.2            [A]vue-router
v2.0            [A]Client.vue
v2.1            [A]ClientNew.vue
v3.0            [A]ClientEdit.vue
v3.0.1          [U]docker-compose add webpack port 3035

このプロジェクトは大きな変化がこれだけあったんだな。というのが一目でわかります。


タグでコミットを参照できる

タグは指定したコミットの別名(エイリアス)のようなものなので、対象のコミットを指定するときにタグ名で指定することができます。

$ git show v1.2
commit 9861efec5cd2eef323667df0dd9f16d261ff4913 (tag: v1.2)
Author: author <example@test.com>
Date:   Sat Aug 7 10:30:18 2021 +0900

    [A]vue-router

過去のコミットを参照したい場合、git logでコミット番号(ハッシュ値)を探し出し、それを指定して、、、といっためんどくさい作業をしなくてすむようになります。これは便利です。


Githubでタグを簡単に参照できる

複数人で実施しているプロジェクトでタグを設定すると、Github上で各タグを簡単に参照することができます。

Githubのレポジトリを開き「Code」タブを選択すると、上部に「〇tags」という表示があります。


これをクリックすると、タグの一覧を表示することができます。

タグの横の「…」をクリックすると、コミットメッセージが表示されます。

さらに、その下のハッシュ値(上記の例だと「0701d9d」)をクリックすると、コードの詳細を確認することができます。

更にその横の「zip」や「tar.gip」をクリックすると、その時点でのファイルをまとめてダウンロードすることができます。

Githubでタグを使う場合の注意点

リモートレポジトリ(Github)でタグを使う場合は注意が必要です。通常の git pushコマンドでは、タグは送信されません。(個人用の目印の全体共有を防ぐため)

リモートレポジトリにタグを送る場合はgit pushコマンドのオプションで --tag をつける必要があります。

git push <リモートレポジトリ名> --tag
git push <リモートレポジトリ名> <タグ名>


リモートとローカルレポジトリでタグを使い分けられる

通常の git pushコマンドでは、作成したタグは送信されません。このため、自分のローカル用としてだけのタグを設定することができます。

もちろん、送りたいタグだけをリモートレポジトリにプッシュすることも、リモートレポジトリ送ってしまった間違ったタグを削除することもできます。


1つのコミットに複数のタグを設定できる

コミットに対して設定できるタグは1つだけではありません。複数のタグを設定することができます。

自分が使うためのローカル用のタグと、リモートレポジトリ用のタグを使い分けることもできます。

$ git log --oneline
9861efe (tag: v1.2, tag: MyOriginalTag) [A]vue-router


タグを使う上でのデメリットと注意点

git tagは便利で色々できる反面、理解が浅いとややこしさがあり、それが注意点やデメリットに直結します。

git pushだけではタグが送信されない

タグはローカルレポジトリとリモートレポジトリで使い分けらるようになているため、通常のgit pushではタグは送信されません。

対処法

タグを送信する場合は別途、タグ用のgit pushをする必要があります。その際、全てのタグをプッシュするコマンドと、指定したタグだけを送るコマンドがあります。

git push <リモートレポジトリ名> --tag
git push <リモートレポジトリ名> <タグ名>


タグ名に使えない文字がある

タグを指定するときに、スペースや「:(コロン)」を使うことはできません。

注意点

Gitのタグにおいて、「:(コロン)」はリモートレポジトリのタグを削除する際に使用するので注意が必要です。

例えば、以下コマンドで指定したタグが削除されます。

git push <リモートレポジトリ名> :<タグ名>

実例

リモートレポジトリ名 originにあるタグ「MyOriginalTag」を削除する場合は以下のようになります。

$ git push origin :MyOriginalTag
To https://github.com/xxxx/レポジトリ名.git
 - [deleted]         MyOriginalTag


タグ名を直接変更(編集)するコマンドはない

タグ名を変えたいというときに、エディタを立ち上げてタグ名を編集するコマンドはありません。

対処法

タグ名を変更したいときは、元のタグを削除して、新たにタグをつけます

コミット番号で指定するよりもタグ名でコミットを指定した方がわかりやすいので、先に新しタグ名を割り振ってから、古いタグ名を削除するのがお勧めです。

#タグの作成
git tag <新しいタグ名> <古いタグ名>
#タグの削除
git tag -d <古いタグ名>


タグ名の変更方法の実例

例えば、次のように「v3.0」というタグを「v4.0」に書き換える場合は次のようにします。

$ git log --oneline
61d3b4b (tag: v3.0) [A]ClientEdit.vue

▼タグ名の変更処理

#タグv3.0のコミットに、v4.0を付け加える
$ git tag v4.0 v3.0

この状態ではタグは以下のようになっています。

$ git log --oneline
61d3b4b (tag: v4.0, tag: v3.0) [A]ClientEdit.vue

この状態から、古いタグ「v3.0」を削除します。

$ git tag -d v3.0
Deleted tag 'v3.0' (was 61d3b4b)

最後にタグを確認します。

$ git log --oneline
61d3b4b (tag: v4.0) [A]ClientEdit.vue

タグ3.0が、4.0に切り替わりました。


同じタグ名は使えない

タグ名はユニークである必要があります。既に使用しているタグ名を使おうとすると「fatal: tag ‘タグ名’ already exists」というエラーが出ます。

$ git tag v4.0
fatal: tag 'v4.0' already exists


対処法

既存のタグ名他のタグに新たに付け直したい場合は、タグ名を移動することができます

以下のようにgit tagコマンドに「-f」オプションをつけます。-fはforceの略で強制的にタグを指定したコミットに付け直すという意味です。

git tag -f <タグ名> <コミット>


実例

#通常コマンドではエラーになる
$ git tag v4.0
fatal: tag 'v4.0' already exists

#-fオプションをつける
$ git tag -f v4.0
Updated tag 'v4.0' (was 61d3b4b)

なお、git tagコマンドの第2引数でコミットを指定しない場合は、現在のブランチの最新のコミットにタグ付けを行います。


タグ名の設定方法

git tagコマンドを使ってタグ名を設定する、どのコミットにタグを付けたいかによって引数で指定する内容が変わります。

タグ名の設定方法
  1. 現在のブランチの最新のコミットにタグをつける。
  2. 指定したコミットにタグをつける。
  3. 指定したブランチの最新のコミットにタグをつける。
#現在のブランチの最新のコミットにタグをつける
git tag <タグ名>
#指定したコミットにタグをつける
git tag <タグ名> <コミット>
#指定したブランチの最新のコミットにタグをつける
git tag <タグ名> <ブランチ名>

下記で実例を紹介します。


現在のブランチの最新のコミットにタグをつける方法

現在のブランチの最新のコミットにタグをつけるには、git tagコマンドでタグ名のみを記載します(第2引数を省略します)

git tag <タグ名>

実例

#現在のブランチの最新のコミットに「v3.0.1」をつける
$ git tag v3.0.1

#タグが設定されたか確認
$ git log --oneline
0701d9d (HEAD -> aa, tag: v3.0.1, origin/aa) [U]docker-compose add webpack port 3035

現在のブランチ(上記例では「aa」)の最新のコミット「0701d9d」に「tag: v3.0.1」が設定されていることがわかります。


指定したコミットにタグをつける方法

指定したコミットにタグをつける場合は、git tagの第2引数でコミットを指定します。

git tag <タグ名> <コミット>

point

コミットの指定は、コミット番号(ハッシュ値)以外に、@やHEADを使った指定、既に設定してあるタグ名などでも行えます。

合わせて読みたい

HEADや@によるコミットの指定はGitで非常によく使います。これらの詳細については下記をご参考ください。

【Git】HEAD~~, HEAD^^, アットマーク@~(チルダ), @^(キャレット)とは何か?意味や違いについて実例で解説


実例1:コミット番号で指定する

例えば以下のようなコミット履歴でコミット番号「61d3b4b」にタグ名「v1.0」を割り当ててみます。

$ git log --oneline
0701d9d (HEAD -> aa, origin/aa) [U]docker-compose add webpack port 3035
a90d4ef [U]content-security-policy(CSP) enable webpack-dev-server
6adca49 [A]destroyメソッド & Modal追加
61d3b4b [A]ClientEdit.vue

git tagでタグ名とコミットを指定します。

$ git tag v1.0 61d3b4b

実行しても何も表示されませんが、正しく実行できています。

念のため確認します。

$ git log --oneline
0701d9d (HEAD -> aa, origin/aa) [U]docker-compose add webpack port 3035
a90d4ef [U]content-security-policy(CSP) enable webpack-dev-server
6adca49 [A]destroyメソッド & Modal追加
61d3b4b (tag: v1.0) [A]ClientEdit.vue

指定したコミット「61d3b4b」にタグ名「v1.0」を割り当てられていることがわかります。


実例2:タグ名で指定する

既に設定してあるタグ名でどのコミットかを指定することもできます。

以下のタグ名「v1.0」に「マイtag」という名前のタグを設定してみます。

$ git log --oneline
0701d9d (HEAD -> aa, origin/aa) [U]docker-compose add webpack port 3035
a90d4ef [U]content-security-policy(CSP) enable webpack-dev-server
6adca49 [A]destroyメソッド & Modal追加
61d3b4b (tag: v1.0) [A]ClientEdit.vue

git tagで「v1.0」を指定してタグ名を割り当てます。

$ git tag "マイtag" v1.0

確認すると次のようになります。

$ git log --oneline
0701d9d (HEAD -> aa, origin/aa) [U]docker-compose add webpack port 3035
a90d4ef [U]content-security-policy(CSP) enable webpack-dev-server
6adca49 [A]destroyメソッド & Modal追加
61d3b4b (tag: マイtag, tag: v1.0) [A]ClientEdit.vue

「tag: マイtag, tag: v1.0」となり、タグが正しく設定されていることがわかります。

補足

git tagの第1引数でタグ名を指定するときは、ダブルクオテーションで囲んでも囲まなくてもどちらでも使えます。

$ git tag "マイtag" v1.0

↓↑ 同じ

$ git tag マイtag v1.0


実例3:@やHEADで指定する

コミットを指定するときに、現在のコミットからいくつ遡るかを@やHEADで指定することもできます。

以下のコミット履歴で現在から数えて2個前の「6adca49 [A]destroyメソッド & Modal追加」にタグ「v2.0」をつけてみます。

$ git log --oneline
0701d9d (HEAD -> aa, origin/aa) [U]docker-compose add webpack port 3035
a90d4ef [U]content-security-policy(CSP) enable webpack-dev-server
6adca49 [A]destroyメソッド & Modal追加
61d3b4b (tag: マイtag, tag: v1.0) [A]ClientEdit.vue

2個前のタグに「v2.0」を設定。

$ git tag v2.0 @^^ 

タグが付いたかを確認

$ git log --oneline
0701d9d (HEAD -> aa, origin/aa) [U]docker-compose add webpack port 3035
a90d4ef [U]content-security-policy(CSP) enable webpack-dev-server
6adca49 (tag: v2.0) [A]destroyメソッド & Modal追加
61d3b4b (tag: マイtag, tag: v1.0) [A]ClientEdit.vue

現在のコミットから2つ前のコミット「6adca49」にタグ「v2.0」がついていることがわかります。

HEADや@によるコミットの指定はGitで非常によく使います。これらの詳細については下記をご参考ください。

【Git】HEAD~~, HEAD^^, アットマーク@~(チルダ), @^(キャレット)とは何か?意味や違いについて実例で解説


指定したブランチの最新のコミットにタグをつける方法

指定したブランチの最新のコミットにタグをつけるには、第2引数でブランチ名を指定します。

git tag <タグ名> <ブランチ名>

実例

例えば以下のように、過去の「b4cd08a」にtestブランチがあります。

$ git log --oneline
cf294ce (HEAD -> main, origin/main, origin/HEAD) [F]AA page customize
d9807e0 [A]Client Project model connected AA
b283ee8 [A]fix db host_name
b4cd08a (test) [F]database.yml

このtestブランチがあるコミットにタグ「v1.1」をつけます。

$ git tag v1.1 test

タグが正しく設定されたか確認します。

$ git log --oneline
cf294ce (HEAD -> main, origin/main, origin/HEAD) [F]AA page customize
d9807e0 [A]Client Project model connected AA
b283ee8 [A]fix db host_name
b4cd08a (tag: v1.1, test) [F]database.yml

testブランチがあるコミット「b4cd08a」にタグ「v1.1」が設定されていることがわかります。

補足

ブランチもタグと同様に、ある特定のコミットを指すポインタです。なので実質は、 git tag <タグ名> <ブランチ名>git tag <タグ名> <コミット>と同じです。

合わせて読みたい

なお、コミットを指定する方法には、タグ名やブランチ名、@^^, HEAD~~~といった表記以外にも、HEAD@{n}や@@{n}といった指定方法もあります。詳細については下記をご参考ください。

【Git】git reflogとは何かを完全理解(HEAD@{n}や@@{n}とは何か?違いは?)使い方を実例で解説


設定したタグの一覧を参照する

現在のレポジトリにどんなタグが設定されているかを一覧で表示することもできます。

表示方法はいくつかあります。まとめると以下のようになってます。

オプションコマンド例内容
なしgit tagタグ名の一覧を表示する
--columngit tag --column設定してあるタグ一覧を1行で表示する
-ngit tag -n注釈(注釈がない場合はコミットメッセージ)も合わせて表示する
-l “パターン”git tag -l "v*"パターンマッチングで該当するタグの一覧のみを表示する(*と?)
-n “パターン”git tag -n "v*"パターンマッチングで該当するタグ名とその注釈(注釈がない場合はコミットメッセージ)も合わせて表示する

注釈はコミットメッセージとは別にタグに設定できる専用のメッセージです。注釈の設定方法については後述します。


git tag(引数なし)

引数なしのgit tagは現在設定されているタグの一覧を表示するコマンドです。

git tag

実例

$ git tag
v1.0
v1.2
v2.0
v2.1
v3.0
マイtag
マイtag2


git tag –column

git tag --columnはタグを1行で表示するコマンドです。

git tag --column

実例

$ git tag --column
v1.0      v1.2      v2.0      v2.1      v3.0      マイtag   マイtag2


git tag -l “パターン”

git tag -l "パターン"は指定したパターンに合致するタグのみを表示するコマンドです。

git tag -l "パターン"
point

パターンマッチングは、任意の文字の繰り返しを指定する場合は「*(アスタリスク)」、任意の位置文字を指定する場合は「?」を使います。

実例

冒頭が「v」で始まるタグ名を表示する場合は以下のようになります。

$ git tag -l "v*"
v1.0
v1.2
v2.0
v2.1
v3.0


任意の1文字を指定する場合は以下のようになります。

$ git tag -l "v?.0"
v1.0
v2.0
v3.0


~を含むとしたい場合は「*文字列*」とします。

$ git tag -l "*マイ*"
マイtag
マイtag2


なお --columnオプションと組み合わせることもできます。

$ git tag -l "v*" --column
v1.0  v1.2  v2.0  v2.1  v3.0


パターンを指定しない場合(git tag -l)はgit tagと同じになります。

$ git tag -l
v1.0
v1.2
v2.0
v2.1
v3.0
マイtag
マイtag2


git tag -n

git tag -nはタグ名と合わせて注釈も表示します。注釈が設定されていない場合は、コミットメッセージを表示します。(※注釈の設定方法については後述しています)

git tag -n

実例

$ git tag -n 
v1.0            XX注釈XX
v1.2            [A]vue-router
v2.0            [A]destroyメソッド & Modal追加
v2.1            [A]ClientNew.vue
v3.0            [U]content-security-policy(CSP) enable webpack-dev-server
マイtag         [A]ClientEdit.vue
マイtag2        [U]content-security-policy(CSP) enable webpack-dev-server


なお--columnオプションとの併用はできません。

$ git tag -n --column
fatal: --column and -n are incompatible

「incompatible」とは互換性がないという意味です。「--column and -n are incompatible」は--columnと-nは同時に使えないよという内容です。

git tag -n "パターン"

git tag -n "パターン"のように-nオプションの後ろで、パターンを指定すると、合致するタグ名と注釈を(注釈が無い場合はコミットメッセージ)表示します。

実例

point

パターンマッチングは、任意の文字の繰り返しを指定する場合は「*(アスタリスク)」、任意の位置文字を指定する場合は「?」を使います。

冒頭が「v」で始まるタグ名を表示する場合は以下のようになります。

$ git tag -n "v*"
v1.0            XX注釈XX
v1.2            [A]vue-router
v2.0            [A]destroyメソッド & Modal追加
v2.1            [A]ClientNew.vue
v3.0            [U]content-security-policy(CSP) enable webpack-dev-server


任意の1文字を指定する場合は以下のようになります。

$ git tag -n "v?.0"
v1.0            XX注釈XX
v2.0            [A]destroyメソッド & Modal追加
v3.0            [U]content-security-policy(CSP) enable webpack-dev-server


~を含むとしたい場合は「*文字列*」とします。

$ git tag -n "*マイ*"
マイtag         [A]ClientEdit.vue
マイtag2        [U]content-security-policy(CSP) enable webpack-dev-server


注釈をつけたタグを設定する方法

git tagで生成するタグにはコミットメッセージ以外にタグ専用の注釈(メッセージ)を作成することができます。

注釈の設定方法は、注釈なしでタグ名を指定するコードに「-a」オプションをつけるだけです。

(「-a」または「--annotate」オプションでも注釈をつけることができます。)


-aオプションの意味

-aは--annotateの省略形です。annotateは「注釈をつける」の意味です。

point

-(ハイフン)一つのオプションをショートオプション、-(ハイフン)が2つのオプションをロングオプションといいます。

ハイフン一つは省略形で、後ろに記号が一文字だけつきます。通常は省略形のショートオプションを使うのが一般的ですが、ロングオプションを使っても同じ処理になります。

git tag -a 

↑↓同じ

git tag --annotate


注釈を設定する方法

注釈を設定する方法は以下の3つがあります。

注釈を設定する方法
  1. エディタを起動する。
  2. コマンドライン上で直接注釈を入力する。「-a」と「-m」オプションを使う
  3. コマンドライン上で直接注釈を入力する。「-am」オプションを使う

以下でそれぞれの方法を実例で解説します。

エディタを起動する場合

エディタを起動する場合は-aオプションを付けて、タグ名を指定します。

git tag -a <タグ名> <コミット>
補足

オプションを指定する場所はタグ名の前である必要性はありません。以下でも同様の処理になります。

git tag <タグ名> -a <コミット>

↑↓ 同じ

git tag -a <タグ名> <コミット>

↑↓ 同じ

git tag <タグ名> <コミット> -a


実例

例えば、現在のブランチの最新のコミットに「v1.0」というタグ名をつけて、注釈をエディタで設定する場合は以下のようになります。

$ git tag v1.0 -a

VSCodeを使う場合は以下のようなエディタが起動します。

セーブして、閉じれば処理は完了です。

以下のようなメッセージが表示されますが、問題なく作業できます。

hint: Waiting for your editor to close the file... [0126/111345.264:ERROR:registration_protocol_win.cc(102)] CreateFile: 指定されたファイルが見つかりません。 (0x2)


コマンドライン上で直接注釈を入力する。「-a」と「-m」オプションを使う

注釈を設定する2つ目の方法は、「-a」と「-m」オプションを使って、コマンドライン上で直接注釈を入力するものです。

git tag -a <タグ名> -m "注釈の内容" <コミット>

-mオプションは--messageのショートオプションで、注釈の内容(メッセージ)を指定できます。

補足

オプションを指定する場所はタグ名の前である必要性はありません。以下でも同様の処理になります。

git tag <タグ名> -a <コミット>

↑↓ 同じ

git tag -a <タグ名> <コミット>

↑↓ 同じ

git tag <タグ名> <コミット> -a


実例

コミット番号「00093d1」にタグ名「v0.1」で注釈「注釈の内容」というメッセージを付ける場合は以下のようになります。

$ git tag v0.1 -a -m "注釈の内容" 00093d1

確認すると、正しく注釈が設定されていることがわかります。

$ git tag -n "v0.1"
v0.1            注釈の内容

またはgit logで履歴を参照

$ git log --oneline
00093d1 (tag: v0.1) [F]ClientNewからClientForm.vueを切り出し


コマンドライン上で直接注釈を入力する。「-am」オプションを使う

注釈を設定する3つ目の方法は、「-am」オプションを使って、コマンドライン上で直接注釈を入力するものです。

ハイフン一つのショートオプションでは複数のショートオプションをつなげることができます。

「-am」は「-a」「-m」と同じです。

git tag <タグ名> -am "注釈の内容" <コミット>


実例

コミット番号「00093d1」にタグ名「v0.2」で注釈「注釈の内容2」というメッセージを付ける場合は以下のようになります。

$ git tag v0.2 -am "注釈の内容2" 00093d1

確認すると、正しく注釈が設定されていることがわかります。

$ git tag -n "v0.2"
v0.2            注釈の内容2

またはgit logで履歴を参照

$ git log --oneline
00093d1 (tag: v0.2, tag: v0.1) [F]ClientNewからClientForm.vueを切り出し


注釈を変更する方法

既にある注釈の内容を変更したい場合は、注釈をつけたタグを強制的に上書きします。

git tag -f <タグ名> -am "注釈の内容" <コミット>

-fオプションはタグを強制的に上書きするオプションです。


実例

以下のようにtag名「v0.2」注釈の内容「注釈の内容2」となっている注釈を「注釈の内容を変更しました」に変えます。

$ git log --oneline
00093d1 (tag: v0.2) [F]ClientNewからClientForm.vueを切り出し
$ git tag -n "v0.2"
v0.2            注釈の内容2


コミット番号を指定してタグを上書きします。

$ git tag -f v0.2 -am "注釈の内容を変更しました" 00093d1
Updated tag 'v0.2' (was 187cd03)

注釈の内容を確認すると、正しく変更されていることがわかります。

$ git tag -n "v0.2"
v0.2            注釈の内容を変更しました


注意点

注釈を上書きするときのコミットの指定にタグ名は使用できません。

実例

例えば、タグv0.2の内容を修正するときに、対象のコミットとして「v0.2」は指定できません。

$ git tag -f v0.2 -am "注釈の内容を変更しました" v0.2

以下のようなエラーが表示されます。

hint: You have created a nested tag. The object referred to by your new tag is
hint: already a tag. If you meant to tag the object that it points to, use:
hint:
hint:   git tag -f v0.2 v0.2^{}
hint: Disable this message with "git config advice.nestedTag false"


タグの削除(ローカルレポジトリのタグの場合)

タグを削除するときは-dオプションを使います。dはdeleteの略です。

git tag -d <タグ名>

スペースを開けて複数のタグを指定すれば、まとめて削除することができます。

注意点

削除したのはローカルレポジトリのタグのみで、リモートレポジトリのタグは残っています。

リモートレポジトリのタグを消す場合は、別途、git push <リモートレポジトリ名> -d <タグ名>を実行する必要があります。


実例:1つのタグを指定して削除

例えばタグ名「v0.1」を削除する場合は以下のようになります。

$ git tag -d v0.1
Deleted tag 'v0.1' (was 8ca0a7b)

実例:複数のタグを指定して削除

例えばタグ名「v0.2」「マイtag2」という複数のタグを削除する場合は以下のようになります。

$ git tag -d v0.2 マイtag2
Deleted tag 'v0.2' (was 788eae0)
Deleted tag 'マイtag2' (was a90d4ef)


存在しないタグを指定するとエラーになる

既に削除したタグなど、存在しないタグを指定するとエラーになります。

$ git tag -d v0.2
error: tag 'v0.2' not found.


タグの削除(リモートレポジトリのタグの場合)

リモートレポジトリのタグの削除方法

ローカルのタグを削除しただけではリモートレポジトリのタグは削除されません。

リモートレポジトリに存在するタグを削除したい場合は、削除する内容をプッシュする必要があります。

$ git push <リモートレポジトリ名> -d <タグ名>
注意点

削除したのはリモートレポジトリのタグのみで、ローカルのタグは残っています。

ローカルのタグを消す場合は、別途、git tag -d <タグ名>を実行する必要があります。


色々な記述

タグを削除するときは、-dオプション以外にも「:タグ名」や「:refs/tags/タグ名」でも同じ処理になります。

$ git push <リモートレポジトリ名> -d <タグ名>

 ↑↓ 同じ

$ git push <リモートレポジトリ名> :<タグ名>

 ↑↓ 同じ

$ git push <リモートレポジトリ名> :refs/tags/<タグ名>

「:」というのは「ローカルレポジトリのブランチ:リモートレポジトリのブランチ」のようにローカルとリモートを指定するときに使うものです。ローカルレポジトリを指定しない=空の内容を送る、つまり、削除となります。

refs/tags/タグ名というのはタグ名のフルネームのようなものです。タグ名やブランチ名などを参照名といい通常はrefsなどの接頭語が省略されています。これをフルで記載すると、タグの場合は「refs/tags/タグ名」となります。

合わせて読みたい

参照名やrefsなどの接頭語について詳しく知りたい方は下記をご参考ください。(git log –decorateの説明は飛ばして、参照名と接頭語のところだけ確認ください)

(参考)git log –decorateとは何か?参照名(ref name)とは何かについて実例で解説


実例

例えばリモートレポジトリに以下のようにタグがあるとします。

ここから、タグ「v4.0」を削除する場合は以下のようにします。

$ git push origin -d v4.0
To https://github.com/xxxxx/yyyyy.git
 - [deleted]         v4.0

Githubで確認するとタグが削除されていることがわかります。

なお、「:」を使って指定する方法の場合は以下のようになります。

$ git push origin :v3.0.1
To https://github.com/xxxxx/yyyyy.git
 - [deleted]         v3.0.1

接頭語も含めたフルネームで指定する場合は以下のようになります。

$ git push origin :refs/tags/v3.0
To https://github.com/xxxxx/yyyyy.git
 - [deleted]         v3.0

Githubで確認するとタグが削除されていることがわかります。


複数のタグをまとて削除する

リモートレポジトリにあるタグを複数まとめて削除したい場合は、-dオプションの後ろでスペースを開けてタグ名を複数記述します。

$ git push <リモートレポジトリ名> -d <タグ名1> <タグ名2>,,,,


実例

以下のようなリモートレポジトリのタグ一覧から「v2.1」と「v2.0」をまとめて削除します。

git push origin -dでタグ名をまとめて記述します。

$ git push origin -d v2.0 v2.1
To https://github.com/xxxxx/yyyyyy.git
 - [deleted]         v2.0
 - [deleted]         v2.1

[deleted]と表示され、指定したタグがまとめて削除されたのがわかります。

リモートレポジトリのタグを確認すると削除が正しく反映されています。


タグ名の変更

Gitのタグを使っていると既にあるタグ名を変更したい場合があります。ですが、git tagにはタグ名を直接編集するコマンドは用意されていません

ここでは、タグ名の変更が発生しうる、以下の2つのパターン別に対処法を紹介します。

  1. タグ名を別の名前に変える。
  2. 既にあるタグ名を他のコミットに付け替える。


タグ名を別の名前に変える

既存のタグ名を変更したいときは、元のタグを削除して、新たにタグをつけます

コミット番号で指定するよりもタグ名でコミットを指定した方がわかりやすいので、先に新しタグ名を割り振ってから、古いタグ名を削除するのがお勧めです。

#タグの作成
git tag <新しいタグ名> <古いタグ名>
#タグの削除
git tag -d <古いタグ名>


タグ名の変更方法の実例

例えば、次のように「v3.0」というタグを「v4.0」に書き換える場合は次のようにします。

$ git log --oneline
61d3b4b (tag: v3.0) [A]ClientEdit.vue

▼タグ名の変更処理

#タグv3.0のコミットに、v4.0を付け加える
$ git tag v4.0 v3.0

この状態ではタグは以下のようになっています。

$ git log --oneline
61d3b4b (tag: v4.0, tag: v3.0) [A]ClientEdit.vue

この状態から、古いタグ「v3.0」を削除します。

$ git tag -d v3.0
Deleted tag 'v3.0' (was 61d3b4b)

最後にタグを確認します。

$ git log --oneline
61d3b4b (tag: v4.0) [A]ClientEdit.vue

タグ3.0が、4.0に切り替わりました。


既にあるタグ名を他のコミットに付け替える

タグ名はユニークである必要があるため、同じタグ名を複数設定することはできません。

例えば、既存のタグ名を他のコミットに付け替えたい場合は以下のコマンドでタグの強制上書きを行います。

git tag -f <タグ名> <新しくタグを付けるコミット>

-fは–forceのショートオプションで強制実行を意味しています。

注意点

付け替えたタグがリモートレポジトリにもある場合、1つのタグがリモートレポジトリとローカルレポジトリで別々のコミットを指すことになります。

結果として、タグのpushやgit fetchなどでタグ重複のエラーが発生するようになるので注意してください。

エラーが発生した場合は、リモートレポジトリかローカルレポジトリどちらかのタグを削除(あるいは名前の変更)する必要があります。


実例

例えば、以下のようなコミットログがあるとします。

$ git log --oneline
0701d9d (HEAD -> aa, origin/aa) [U]docker-compose add webpack port 3035
a90d4ef [U]content-security-policy(CSP) enable webpack-dev-server
6adca49 (tag: v2.0) [A]destroyメソッド & Modal追加

コミット番号「6adca49」についているタグ「v2.0」を、一つ上の「a90d4ef」に付け替えます。

-fオプションをつけて、タグ名とコミットを指定し、実行します。

$ git tag -f v2.0 a90d4ef
Updated tag 'v2.0' (was 6adca49)

以上でタグの付け替えは完了です。

git logで確認すると以下のようになっています。

$ git log --oneline
0701d9d (HEAD -> aa, origin/aa) [U]docker-compose add webpack port 3035
a90d4ef (tag: v2.0) [U]content-security-policy(CSP) enable webpack-dev-server
6adca49 [A]destroyメソッド & Modal追加

コミット番号「6adca49」についていたタグ「v2.0」が、指定した「a90d4ef」に付け替わっていることがわかります。


リモートレポジトリにタグをプッシュ(反映)する方法

リモートレポジトリ(Github)でタグを使う場合は注意が必要です。

通常の git pushコマンドでは、タグは送信されません。(個人用の目印の全体共有を防ぐため)

リモートレポジトリにタグを送る場合は以下の2つの方法があります。

リモートレポジトリにタグをプッシュする方法
  1. すべてのタグをプッシュする。(–tagオプション)
  2. 指定したタグのみをプッシュする。
git push <リモートレポジトリ名> --tag
git push <リモートレポジトリ名> <タグ名>

以下で実例を交えて解説しています。

すべてのタグをプッシュする方法

ローカルレポジトリにある全てのタグをリモートレポジトリにプッシュするには–tagオプションを使います。

git push <リモートレポジトリ名> --tag


実例

git push --tagを実行すると、以下のようにタグがまとめてリモートレポジトリにプッシュされます。

$ git push --tag
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
To https://github.com/xxxxx/yyyyy.git
 * [new tag]         MyOriginalTag -> MyOriginalTag
 * [new tag]         NewTag -> NewTag
 * [new tag]         v4.0 -> v4.0


指定したタグのみをプッシュする方法

ローカルレポジトリにあるタグのうち、指定したタグのみをリモートレポジトリにプッシュするにはタグ名を指定します。

git push <リモートレポジトリ名> <タグ名>

複数指定する場合は、タグ名の後ろにスペースを開けて他のタグ名を指定します。

git push <リモートレポジトリ名> <タグ名1> <タグ名2> <タグ名3>,,,,,

実例

例えば以下のようなタグ状態のリモートレポジトリがあるとします。

ここに、新しいタグとして「v2.0」「v2.1」「v3.0」の3つだけをプッシュする場合は以下のようにします。

$ git push origin v2.0 v2.1 v3.0
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
To https://github.com/shizen-shin/rails-aa.git
 * [new tag]         v2.0 -> v2.0
 * [new tag]         v2.1 -> v2.1
 * [new tag]         v3.0 -> v3.0

Githubのリモートレポジトリを確認するとプッシュしたタグのみが反映されていることがわかります。


注意点:エラー対処法

リモートレポジトリにタグをプッシュしたときに次のようなエラーが発生することがあります。

Updates were rejected because the tag already exists in the remote

これは、送信しようとしているタグがリモートレポジトリ上の他のコミットで既に使われている場合に発生するエラーです。

このときの主な対処法は3つあります。

対処法
  1. ローカルレポジトリの重複しているタグを削除する。
  2. ローカルレポジトリの重複しているタグ名を変更する。
  3. リモートレポジトリのタグを削除する。


ローカルレポジトリの重複しているタグを削除する

以下のコマンドを実行します。

git tag -d <タグ名>


ローカルレポジトリの重複しているタグ名を変更する

既存のタグ名を変更したいときは、元のタグを削除して、新たにタグをつけます

コミット番号で指定するよりもタグ名でコミットを指定した方がわかりやすいので、先に新しタグ名を割り振ってから、古いタグ名を削除するのがお勧めです。

#タグの作成
git tag <新しいタグ名> <古いタグ名>
#タグの削除
git tag -d <古いタグ名>


リモートレポジトリのタグを削除する

以下のコマンドを実行します。

$ git push <リモートレポジトリ名> -d <タグ名>
タイトルとURLをコピーしました