Gitにはgit tagというコマンドで各コミットにタグという目印を付けることができます。
非常に便利な代物ですが、時にはタグ名を間違ってつけてしまった場合などタグ名を変更したいこともあります。
ここではタグ名を変更する方法についてまとめています。
タグ名の変更・修正方法
Gitのタグを使っていると既にあるタグ名を変更したい場合があります。ですが、git tagにはタグ名を直接編集するコマンドは用意されていません。
タグ名を変更するには以下のどちらかを実行する必要があります。
タグ名を別の名前に変える
タグ名を別の名前に変える方法
タグ名を間違ってつけてしまった場合など、既存のタグ名を変更したいときは、元のタグを削除して、新たにタグをつけます。
コミット番号で指定するよりもタグ名でコミットを指定した方がわかりやすいので、先に新しタグ名を割り振ってから、古いタグ名を削除するのがお勧めです。
#タグの作成
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のショートオプションで強制実行を意味しています。
実例
例えば、以下のようなコミットログがあるとします。
$ 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」に付け替わっていることがわかります。
注意点
タグ名を付け替えた場合、付け替えたタグがリモートレポジトリにも存在することがあります。
このとき、1つのタグがリモートレポジトリとローカルレポジトリで別々のコミットを指すことになります。
結果として、タグのpushやgit fetchなどでタグ重複のエラーが発生するようになるので注意してください。
エラーが発生した場合は、リモートレポジトリかローカルレポジトリどちらかのタグを削除(あるいは名前の変更)する必要があります。
タグの削除方法については下記をご参考ください。
(参考)git tagを削除する方法を実例でわかりやすく解説