記事の目的
- git log コマンドについて記載
本文
1.概要
- 過去に何が起こったのか振り返りたくなる時に使う
- ここからの例では、 "simplegit" というプロジェクトを使用する。
- デフォルト&引数なしで git log を使用した場合
このようにして取得する。
$ git clone https://github.com/schacon/simplegit-progit
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
commit a11bef06a3f659402fe7563abf99ad00de2209e6
Author: Scott Chacon <schacon@gee-mail.com>
Date: Sat Mar 15 10:31:28 2008 -0700
first commit
・デフォルトで引数を何も指定しなければ、 git log はそのリポジトリでのコミットを新しい順に表示します。
・表示するもの:「SHA-1チェックサム」「作者の名前とメールアドレス」「コミット日時」「コミットメッセージ」
- オプション -p -2を使用した場合
・-p は、各コミットで反映された変更点を表示します。
・-2 は、直近に2エントリだけを出力します。
・このオプションは、先ほどと同じ情報を表示するとともに、各エントリの直後にそのdiffを表示します。
・コードレビューの時に非常に便利。他のメンバーが一連のコミットで何をおこなったのかをざっと眺めるのにも便利。
$ git log -p -2
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date: Mon Mar 17 21:52:11 2008 -0700
changed the version number
diff --git a/Rakefile b/Rakefile
index a874b73..8f94139 100644
--- a/Rakefile
+++ b/Rakefile
@@ -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@gee-mail.com"
s.summary = "A simple gem for using Git in Ruby code."
commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Scott Chacon <schacon@gee-mail.com>
Date: Sat Mar 15 16:40:33 2008 -0700
removed unnecessary test
diff --git a/lib/simplegit.rb b/lib/simplegit.rb
index a0a60ae..47c6340 100644
--- a/lib/simplegit.rb
+++ b/lib/simplegit.rb
@@ -18,8 +18,3 @@ class SimpleGit
end
end
-
-if $0 == __FILE__
- git = SimpleGit.new
- puts git.show
-end
\ No newline at end of file
- オプション --stat を使った場合
・各コミットに関するちょっとした統計情報を見たい,「まとめ」系のオプション
・各コミットエントリに続けて変更されたファイルの一覧と変更されたファイルの数、追加・削除された行数が表示されます。また、それらの情報のまとめを最後に出力します。
$ git log --stat
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date: Mon Mar 17 21:52:11 2008 -0700
changed the version number
Rakefile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
commit 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
Author: Scott Chacon <schacon@gee-mail.com>
Date: Sat Mar 15 16:40:33 2008 -0700
removed unnecessary test
lib/simplegit.rb | 5 -----
1 file changed, 5 deletions(-)
commit a11bef06a3f659402fe7563abf99ad00de2209e6
Author: Scott Chacon <schacon@gee-mail.com>
Date: Sat Mar 15 10:31:28 2008 -0700
first commit
README | 6 ++++++
Rakefile | 23 +++++++++++++++++++++++
lib/simplegit.rb | 25 +++++++++++++++++++++++++
3 files changed, 54 insertions(+)
- オプション --pretty を使用した場合
・ログをデフォルトの書式以外で出力する。
・oneline オプションは、各コミットを一行で表示する。(大量のコミットを見るのに便利)
・他には short 、 full 、 fuller といったオプションもある。標準とほぼ同じ書式だけれども情報量がそれぞれ少なめあるいは多めになる。
・oneline オプションを使用した場合
$ git log --pretty=oneline
ca82a6dff817ec66f44342007202690a93763949 changed the version number
085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7 removed unnecessary test
a11bef06a3f659402fe7563abf99ad00de2209e6 first commit
・format を使用した場合
独自のログ出力フォーマットを指定することができる。
$ git log --pretty=format:"%h - %an, %ar : %s"
ca82a6d - Scott Chacon, 6 years ago : changed the version number
085bb3b - Scott Chacon, 6 years ago : removed unnecessary test
a11bef0 - Scott Chacon, 6 years ago : first commit
2."git log --pretty=format"用の便利なオプション
オプション | 出力される内容 |
---|---|
%H | コミットのハッシュ |
%h | コミットのハッシュ (短縮版) |
%T | ツリーのハッシュ |
%t | ツリーのハッシュ (短縮版) |
%P | 親のハッシュ |
%p | 親のハッシュ (短縮版) |
%an | Author の名前 |
%ae | Author のメールアドレス |
%ad | Author の日付 (--date= オプションに従った形式) |
%ar | Author の相対日付 |
%cn | Committer の名前 |
%ce | Committer のメールアドレス |
%cd | Committer の日付 |
%cr | Committer の相対日付 |
%s | 件名 |
author: その作業をもともとおこなった人
commiter: その作業を適用した人
・さらに --graph を組み合わせると便利
$ git log --pretty=format:"%h %s" --graph
* 2d3acf9 ignore errors from SIGCHLD on trap
* 5e3ee11 Merge branch 'master' of git://github.com/dustin/grit
|\
| * 420eac9 Added a method for getting the current branch.
* | 30e367c timeout code and tests
* | 5a09431 add timeout protection to grit
* | e1193f8 support for heads with slashes in them
|/
* d6016bc require time for xmlschema
* 11d191e Merge branch 'defunkt' into local
3."git log"のよく使われるオプション
オプション | 説明 |
---|---|
-p | 各コミットのパッチを表示する |
--stat | 各コミットで変更されたファイルの統計情報を表示する |
--shortstat | --stat コマンドのうち、変更/追加/削除 の行だけを表示する |
--name-only | コミット情報の後に変更されたファイルの一覧を表示する |
--name-status | 変更されたファイルと 追加/修正/削除 情報を表示する |
--abbrev-commit | SHA-1 チェックサムの全体 (40文字) ではなく最初の数文字のみを表示する |
--relative-date | 完全な日付フォーマットではなく、相対フォーマット (“2 weeks ago” など) で日付を表示する |
--graph | ブランチやマージの歴史を、ログ出力とともにアスキーグラフで表示する |
--pretty | コミットを別のフォーマットで表示する。オプションとして oneline, short, full, fuller そして format (独自フォーマットを設定する) を指定可能 |
4.ログ出力の制限 "--since" "--until"
オプション | 説明 |
---|---|
-(n) | 直近の n 件のコミットのみを表示する |
--since, --after | 指定した日付より後に作成されたコミットのみに制限する |
--until, --before | 指定した日付より前に作成されたコミットのみに制限する |
--author | エントリが指定した文字列にマッチするコミットのみを表示する |
--committer | エントリが指定した文字列にマッチするコミットのみを表示する |
--grep | 指定した文字列がコミットメッセージに含まれているコミットのみを表示する |
-S | 指定した文字列をコードに追加・削除したコミットのみを表示する |
簡単な例
$ git log --since=2.weeks
他にも特定の日を指定したり、相対日付を"2 years 1 day 3 minutes ago"のように指定することもできる。
詳細な例は、Pro Gitを読んでください