プログラミング

Git で過去のコミットにタグを付ける方法

Git でタグを付けたいの巻

こんにちは!

Git って便利ですよねぇ…初めは恐る恐る使ってましたが、ちょっと慣れるとキミなしでは生きれない、みたいな。(?

そんな Git ですがある日、

「めっちゃ歴史が進んじゃったんだけど、過去のコミットを遡ってタグを付けることはできるのか…?」

と思い調べたところ結構簡単にできちゃったのですが、

便利だけど使用頻度は低いので、またやりたいときに絶対手順を忘れそうだな〜…

と思ったので今回は、

Git で過去のコミットにタグを付ける方法

と題して具体的な Git のコマンド操作方法をまとめてみようと思います。

前回ブログはこちらから↓

Git のタグってそもそも何?

Git はコミットごとに40文字のチェックサムを生成しますが、この40文字のチェックサムは、数字とアルファベットからなるハッシュ値(SHA-1)なのでそれだけ見てもなんのことやらよく分かりません。

(Git のサイトを見ると「チェックサム」と書いてありますが、コミットハッシュ、コミットIDとか呼ばれていることが多い印象です)

例えばソースや設計に大きな変更点があった場合や、リリースのバージョンが変わったときなど、すぐに戻れるように目印をを付けておきたいという際に、このタグ機能が役立ちます。

読みかけの本に「ふせん」を貼っておく、みたいなイメージでしょうか。

「ふせん」を貼っておけば、戻りたい時に「ここ!」ってすぐに戻れますもんね。

過去のコミットにタグを付ける方法

さて、以下具体的なコマンドです。

1. 過去のコミットを表示する

タグを付けたいブランチで、過去のコミットを表示します。

$ git log –pretty=oneline

このコマンドで直近のチェックサム一覧を表示できます。

(タグ付けたいのもっと昔のやつなんだけど…って思ったんですけど「エンターキー」を押せば、どんどん昔のやつが表示されました)

見辛いですが、pretty の前はハイフン2つです。

pretty をつけると、チェックサム40字全てが表示されるのですが、40字全てでなくてもタグは付けれるので、これでもOKでした↓

$ git log –oneline

見辛いですが、こちらも online の前はハイフン2つです。

2. タグを付ける

好きなタグ名と注釈を指定し、その後ろにチェックサムを付けます。

指定するチェックサムは40文字全てでなく、一部でも大丈夫。

$ git tag -a [tagname] -m ‘注釈’ [checksum]

※上記の [] はわかりやすいように囲っているだけで、実際ターミナルに打ち込む際は必要ありませんのでご注意ください。
(自分がやらかした)

3. タグが付いたか確認する

タグがきちんと付けられたか確認します。

下記は「 v1.0 」というタグを付けた場合の表示例です。

$ git tag

v1.0

4. タグ情報を確認する

タグ名、注釈、タグを付けた人、コミット日時などタグの詳細を表示します。

$ git show [tagname]

こんな感じでタグ情報が表示されます↓

5. タグをリモートに反映する

ローカルでタグを付けただけでは当然リモートリポジトリに反映されないので、下記コマンドでリモートに反映します。

$ git push origin [tagname]

これでタグ付けの一連の流れは完了です。

簡単でした!!

タグ名を変更する

一度タグ名を付けた後に、「やっぱ変更したい…」と思った時でも大丈夫。

タグ名は下記コマンドで簡単に変更できます。

$ git tag [新タグ名] [旧タグ名]

新タグ名を付けたら旧タグ名を削除します。

$ git tag -d [旧タグ名]

こちらも新しく付けたタグ、削除したタグ、共にリモートへの反映が必要です。

$ git push origin [新タグ名]

$ git push origin :[旧タグ名]

削除したタグをリモートに反映する際は、旧タグ名の前に「 : 」を付けるのを忘れないように。(自戒)

軽量版タグ

Git のタグは、上記に記載した注釈付き ( annotated ) 版と、単にコミットの情報だけの情報をもつ軽量 ( lightweight ) 版があります。

軽量版タグは、-a, -m などのオプションを付けず、下記コマンドで付けられます。

$ git tag [tagname]

まとめ

いや〜、Git って便利ですね!

過去のコミットにタグ付けられるのかな?タグに説明文みたいなの付けれるのかな?って思ったんですけど、

意外と?簡単でした!

つい最近も、「あのバージョンの時のあのファイルの中身ってどうなってたんだけ?」と調べる時があって、タグをつけてたことによりスグにそのファイルを見つけることができてやっぱ便利〜と感じました。

個人開発する際にも役立ちそうです。

ここまでお読みいただき、ありがとうございました!