GitのTagの使い方

今までGitでタグを使うことはなかったが、勤務先で使っているので、勉強。
Git自体の理解(特に考え方や概念に対する理解)がかなり怪しいので、最初はよく分からなかった。備忘録としてまとめておく。

そもそもタグとは何か

コミットのエイリアス、という認識でいいようだ。
コミットに対して分かりやすい名前を付けたのが、タグ。

つまり、コミットを指定して行う操作は、コミットの代わりにタグを指定してもいい。
例えばgit show コミットIDgit checkout -b ブランチの名前 コミットIDは、コミットIDの部分をタグの名前に置き換えても同じことが出来る。

基本的な操作

タグを打つ

$ git tag タグの名前 コミットID

コミットIDを省略した場合は、現在のブランチの最新のコミットに対して、タグが打たれる。

タグの一覧を見る

$ git tag

タグの内容を確認する

$ git show タグの名前


現在のブランチには存在しないタグであっても、問題なく見れる。
というが、タグには、ブランチという概念がない。
そもそもコミットにはブランチという概念がないのだと思う。
このあたりが、そもそもよく分かっていなかった。
hogeブランチのfugaコミット」が存在するのではなく、fugaコミットが独立して存在しており、それをhogeブランチが持っている、という解釈のほうが正しいのだと思う。正確な仕様はまた違うのだろうけど。

ブランチが関係してくるのは一部のケースだけであり、基本的には、タグを使う際はブランチは意識しなくていいのかもしれない。


タグを削除する

$ git tag -d タグの名前

タグの名前を変更する

$ git tag 新しいタグの名前 古いタグの名前
$ git tag -d 古いタグの名前

一つのコミットに対して複数のタグを打つことが出来る。
なので、変更後のタグを追加し、そのあとで古いタグを削除してしまえば、リネームできる。

タグをリモートリポジトリと共有する

タグは、通常のプッシュやプルでは、共有できない。

タグのプッシュ

以下のコマンドで、当該タグの情報をプッシュできる。

$ git push リモートリポジトリ タグの名前

全てのタグの情報をプッシュする場合はこのコマンド。

$ git push リモートリポジトリ --tags

タグのプル

$ git pull リモートリポジトリ --tags

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

ローカルリポジトリでタグを削除した状態で$ git push リモートリポジトリ --tagsとしても、削除の情報は共有されない。
以下のコマンドで削除する必要がある。リネームによって古いタグを削除した場合も、当然行う必要がある。

$ git push リモートリポジトリ :削除したタグの名前

GitHubでの表示

他のホスティングサービスでも同様だと思うが、GitHubでコミットを見ると、タグの情報を確認できる。
以下のように、表示される。

コミットID(タグ) GitHubでの表示
1bacc28
8ef5ecf
ae548ed (4.0) 4.0
b8bdadb 4.0
f39a14a (3.0) 4.0 3.0
7bba876 4.0 3.0
0b2392a (2.0) 4.0 … 2.0
de1b3bf 4.0 … 2.0
5c173e8 (1.0) 4.0 … 1.0
dc5d009 4.0 … 1.0
d8df26c 4.0 … 1.0

コミットIDは、上に行くほど新しい。

基本的には上記の表のように表示されるが、正しく表示されないことがある。
試行錯誤した結果、GitHubで設定しているデフォルトブランチ、そのブランチに存在しないコミットについては、タグ情報は表示されない模様。
例えば、0b2392a2.0を打っているコミット)以降のコミットがデフォルトブランチに存在しない場合、それらのコミットのタグ情報は空白となる。
それより前のコミットについては、上記の表と全く同じように表示される。