Git

git logをきちんと理解する

Gitの機能をひと通り理解したら

Gitの難しさは、コマンドの挙動を理解するだけでは本当に使いこなすことはできないということではないでしょうか。
それを組み合わせたり、適切なタイミングで使わなければなりません。
ウルトラマンも、怪人にいきなりスペシウム光線をうちませんよね?
今回は、Gitを使いこなすために、まずは使えていそうで、使えていないgit logの中身を見て行こうと思います。

ログを読む

gitに置けるlogを、読みこなすために、慣れるまで読むことも大事とは思いますが、ここではそれをしっかり見ることで、使えるようになりたいと思います。

そもそもgit logは何を表示しているのか?

git logはコミットの履歴を表します。というよりも、「変更の歴史」を表示していると言った方がわかりやすいのではないでしょうか?

$ git log
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date:   Mon Mar 17 21:52:11 2008 -0700

    changed the version number

commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Scott Chacon <schacon@gee-mail.com>
Date:   Sat Mar 15 16:40:33 2008 -0700

    removed unnecessary test code

commit a11bef06a3f659402fe7563abf99ad00de2209e6
Author: Scott Chacon <schacon@gee-mail.com>
Date:   Sat Mar 15 10:31:28 2008 -0700

    first commit

上記の表示は、git://github.com/schacon/simplegit-progit.gitから、クローンしたローカルリポジトリでのgit logコマンドの実行結果です。
引数に何も指定しない場合、新しいコミットから順々表示されます。
内容は、

  • SHA-1 チェックサム
  • 作者の名前
  • 作者のメールアドレス
  • コミット日時
  • コミットメッセージ

です。

ログを見やすくする

これをいちいち全て見ていては時間が勿体無いので、必要な情報だけを手に入れる方法を確認しましょう。

オプション① -2

ハイフンに数字を指定したものです。直近からいくつコミットを確認するか指定できます。

オプション② -p

これは非常に便利なコマンドで、どこに変更が加えられているかを表示してくれます。diffですね。
-pオプションで追加された差分を見てみましょう。

出力例
@@ -5,7 +5,7 @@ require 'rake/gempackagetask'
 spec = Gem::Specification.new do |s|
     s.platform  =   Gem::Platform::RUBY
     s.name      =   "simplegit"
-    s.version   =   "0.1.0"
+    s.version   =   "0.1.1"
     s.author    =   "Scott Chacon"
     s.email     =   "schacon@gmail.com"
     s.summary   =   "A simple gem for using Git in Ruby code."

どのファイルのどこが編集されたかが一目瞭然ですね。

オプション③ --stat

--statは、そのコミットの統計情報(どれくらいのファイルが変更されたか、等)を表示します。

出力例
 lib/simplegit.rb | 5 -----
 1 file changed, 5 deletions(-)

オプション④ --pretty

このオプションは、出力形式そのものを大幅に変更します。
例えばcommitを大量に眺めるときには、
git log --pretty=onelineとすることで、

出力例
ca82a6dff817ec66f44342007202690a93763949 (HEAD -> master, origin/master, origin/HEAD) changed the verison number
085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7 removed unnecessary test code
a11bef06a3f659402fe7563abf99ad00de2209e6 first commit

以下のように、各コミットを一行で出力します。

prettyに置けるformatオプション

より詳細に出力をカスタマイズします。

$ git log --pretty=format:"%h - %an, %ar : %s"
ca82a6d - Scott Chacon, 11 months ago : changed the version number
085bb3b - Scott Chacon, 11 months ago : removed unnecessary test code
a11bef0 - Scott Chacon, 11 months ago : first commit

以下がよく使うと思われるオプションです

%an Author の名前
%ae Author のメールアドレス
%ad Author の日付 (--date= オプションに従った形式)
%ar Author の相対日付
%cn Committer の名前
%ce Committer のメールアドレス
%cd Committer の日付
%cr Committer の相対日付
%s 件名

ここで、authorとは、実際に何かを作った人のことを指すと思ってください。
commiterは、実際にその何かをもらって、また別の何かに適応することの人です。

オプション⑤ その他、条件に合わせて

-n(nは数字)のオプションは、実際のところそこまで使うところではないでしょう。

オプション 説明
-(n) 直近の n 件のコミットのみを表示する
--since, --after 指定した日付/時刻以降のCommitDateのコミットのみに制限する
--until, --before 指定した日付/時刻以前のCommitDateのコミットのみに制限する
--author エントリが指定した文字列にマッチするコミットのみを表示する
--committer エントリが指定した文字列にマッチするコミットのみを表示する

一通りわかった上で

当然、ケースバイケースで使うものが絞られるとは思いますが、よう使うものは押さえておくべきだと思います。
これも書こうと思ったのですが、想像以上にこの記事がわかりやすく、素晴らしかったので、内容はお譲りしています。
git log よく使うオプションまとめ - Qiita

終わりに

ここまでで、git logに対してのオプションを、詳しく見てみました。
次回は場面に合わせてどのように使うのか、実際に考えてみます。

参考

Git - コミット履歴の閲覧