gitは言わずと知れた超有名かつ便利なコマンドですが、有名なくせに奥が深すぎてなかなか完全に使いこなすのは難しいコマンドの1つです。
この記事ではそのgitをもう一歩使いこなすためのオプションを紹介します。
「普通にaddしてcommitしてpushする事はできるが、それ以外はあんまりわからない…」という方がさらにgitを使いこなせるようになると思います。
※この「普通にaddしてcommitしてpushする事」を紹介している記事は世の中に数多ありますので、ここではあまり触れない事とします。
この記事の内容は?
「git tag」でタグを切る
git はコミットごとにコミットハッシュが自動で付与されます。しかしこれでははっきり言って人間にはどれがどういう意味を持つのかわかりません。
そこでgit にはタグという機能があります。意味をつけたいコミットを指定して「名前」をつける事ができます。使用方法は下記のようになります。
git tag [タグ名]
同じタグ名はそのリポジトリで1つしか存在できません。しかし同じコミットに複数のタグをつける事はできます。
タグを切る
具体的には下記のように使います。
git tag 1.0.0
コメント付きのタグをつける事もできます。
git tag -a [タグ名] -m [コメント]
上記のように何も指定しない場合、今HEADがある位置にタグが付けられますが、コミットハッシュを指定してタグを付ける事ができます。
git tag 1.0.1 96632032e41a360b040db710665770c8e02356d2
タグのプッシュはブランチのプッシュとは少し異なり、「–tags」オプションをつける必要があります。
git push [リモート名] --tags
タグを確認する
このリポジトリに付けられたタグを一覧表示して確認する事ができます。
git tag -l
タグにチェックアウトする
「git checkout」コマンドはブランチを移動する場合に使う基本的なコマンドですが、これを利用して、タグを付けたコミットに移動する事ができます。
タグ自体はコミットに紐付いていますのでタグにチェックアウトした場合、そのコミットまで移動する事になります。
git checkout [タグ名]
タグを削除する
「-d」をつけてタグ名を指定することでタグを削除することができます。タグを削除してもコミットしたファイルの内容などに影響はありません。
タグは特定のコミットに名前をつけるようなことなので、タグを削除したからと言ってコミットした情報が書き換わることはないのです。
git tag -d [タグ名]
「git describe」で直近のタグを探す
「git describe」コマンドを使って上記で紹介したタグを表示する事ができます。
今の自分のHEADがある位置から一番近いタグが表示されます。
git describe
ここで注意すべき事はタグを切った時に「コメント付きタグ」でないと表示されない事です。
普通に「git tag」コマンドでタグを切っていた場合下記のようなエラーが出てしまいます。
fatal: No annotated tags can describe '92958e487a95f7c427613e4df70112055372597f'.
However, there were unannotated tags: try --tags.
このエラー文に書いてあるように「–tags」オプションを付けるとコメント付き出ないタグも表示する事ができます。
「git diff」で変更した差分をみる
「git diff」コマンドを使うことで最後のコミットからの変更差分をみる事ができます。「git add」でHEADにステージされたファイルの変更差分を見る場合は「git diff –cached」とします。
git diff
ファイル名を指定してファイルごとの差分をみる事もできます。
git diff [ファイル名]
「git show」でコミットの詳細をみる
コミットを何度もするとその履歴がたまっていきます。「git log」コマンドでその履歴を見ることができますが何を変更されたのかはわかりません。
そんな時に使えるのが「git show」コマンドです。下記のようにすることで該当のコミットで一体何がどう変更されたのかを見ることができます。
git show [コミットハッシュ]
git show 96632032e41a360b040db710665770c8e02356d2
「git blame」で誰がコミットしたかをみる
「ここバグってやがる!誰が書いたプログラムだ!」となることもあるかと思います。(そういう犯人探しが行われない職場が理想的ですがw)
そんな時に用いるのが「git blame」コマンドです。使い方は下記の通りです。
git blame [ファイル名]
コミット履歴は嘘をつきません。「git blame」を使うとそのファイルのどの行がいつ誰によって変更されたのかがわかってしまいます。
下記の例でいくとこれでコミットハッシュ「92958e48」で変更されたのがわかります。さらにどう変更されたのかを調べたい場合、「git checkout 92958e48」などとしてその履歴に移動し、そこから「git diff」で変更差分を確認できます。
// git blame test.txt
92958e48 (コミットした人 2017-01-09 15:58:54 +0900 1) 9,ppp
92958e48 (コミットした人 2017-01-09 15:58:54 +0900 2) 10,ttt
まとめ
この記事ではgitの基本のさらにほんの少しだけ先の機能を紹介しました。ここに書いたコマンドを覚えるだけでも生産性が段違いだと思います。
奥が深すぎて1つ1つのコマンドを深ぼる余裕はないので、ぜひ自分の手で動かしてみてください。
追記
さらに深く知りたい方はこちらの記事もご覧ください。