読者です 読者をやめる 読者になる 読者になる

煙と消えるその前に

一服してるうちに忘れる、自分のための備忘録。とかとか

git logのオプションあれこれ

git

普段何気なくgit log叩いてるけど、実はオプションが多くて驚いた。
自分的に使えそうなものをメモしておく。

僕の考えた最強のry

色々調べた結果、自分で使うならこんなところかなーという結論に至った

$ git log --graph --name-status --pretty=format:"%C(red)%h %C(green)%an %Creset%s %C(yellow)%d%Creset"

そのまま使うには長すぎるのでエイリアスにしておく

$ git config --global alias.mylog 'log --graph --name-status --pretty=format:"%C(red)%h %C(green)%an %Creset%s %C(yellow)%d%Creset"'

以下、git logのオプションあれこれ

表示するコミット数を制限する -n num / -num
$ git log -n 5
$ git log -5
各コミットのdiffを表示する -p

オプション無しだとコミットID、Auithor、Date、コミットメッセージだけの表示だが、-pをつければ変更されたdiffも表示される

$ git log -p
commit 7a3b16394b8164ef708caa5686f4cced9f976a0e
Author: EC2 Default User <ec2-user@ip-10-132-178-74.ap-northeast-1.compute.internal>
Date:   Tue Jul 16 02:50:05 2013 +0900

    second?

diff --git a/first.txt b/first.txt
index 5ec586d..31ad3ce 100644
--- a/first.txt
+++ b/first.txt
@@ -1 +1,2 @@
 first commit
+second
コミットIDを短縮表示 --abbrev-commit

SHA-1が長くてやだなーと思ったときに

マージコミットを表示しない --no-merges

リリース用ブランチとかけっこうマージコミット多いんだよね...

ログを1行表示にする --pretty=oneline / --oneline

正しくは--pretty=onelineが1行表示で、--onelineは--pretty=oneline --abbrev-commitと同じ意味らしい

$ git log --pretty=oneline
7a3b16394b8164ef708caa5686f4cced9f976a0e second?
$ git log --oneline
7a3b163 second?
ブランチやタグ名を追記 --decorate

個人的に無名ブランチ切った時にどこのブランチ派生か確認したりする

グラフ表示 --graph

マージした後の確認に便利・・・かな?
--onelineと組み合わせると読みやすい

*   commit 34331a8c5f761489baf151d97ae9e40702325164
|\  Merge: 3756bff 7a3b163
| | Author: EC2 Default User <ec2-user@ip-10-132-178-74.ap-northeast-1.compute.internal>
| | Date:   Tue Jul 16 03:07:35 2013 +0900
| |
| |     Merge branch 'feature'
| |
| * commit 7a3b16394b8164ef708caa5686f4cced9f976a0e
|/  Author: EC2 Default User <ec2-user@ip-10-132-178-74.ap-northeast-1.compute.internal>
|   Date:   Tue Jul 16 02:50:05 2013 +0900
|
|       second?
|
* commit 3756bfff44b99e56da2182521f0b0d07af940323
コミットによる変更ファイルと変更方法だけ表示 --name-status
$ git log --name-status
commit 7a3b16394b8164ef708caa5686f4cced9f976a0e
Author: EC2 Default User <ec2-user@ip-10-132-178-74.ap-northeast-1.compute.internal>
Date:   Tue Jul 16 02:50:05 2013 +0900

    second?

M       first.txt

--onelineと組み合わせると読みやすい感じ

$ git log --name-status --oneline
7a3b163 second?
M       first.txt
2つのブランチ間で異なるコミットだけ出力

できることを知らなかった!
2つのブランチを..でつないで指定するだけ
どちらのブランチに含まれるコミットかを出すなら --left-rightオプションを付ける

$ git log --left-right master..feature
commit > 7a3b16394b8164ef708caa5686f4cced9f976a0e
Author: EC2 Default User <ec2-user@ip-10-132-178-74.ap-northeast-1.compute.internal>
Date:   Tue Jul 16 02:50:05 2013 +0900

    second?
特定Authorのコミットだけを表示 --author=regexp

grepするなんて格好悪い真似はもうしないっ

$ git log --author=ec2-user
ログ出力フォーマットの指定 pretty=format:"(format)"

フォーマット指定でログ出力する方法。出力を指定するオプションがいくつかあるけど、使いそうなのは以下かなぁ

%H      コミットのハッシュ
%h      コミットのハッシュ (短縮版)
%ad     Author の日付
%an     Author の名前
%ar     Author の相対日付
%s      コミットメッセージ
%d      ブランチ/タグ名
%C([color]) これ以降の出力をcolorに変える
   [color] = ["Black","Red","Green","Yellow","Blue","Magenta","Cyan","White"]
%Creset これ以降の出力をデフォルトに戻す

こんな感じに出力される

$ git log --pretty=format:"%h - %an, %ar : %s"
34331a8 - EC2 Default User, 8 minutes ago : Merge branch 'feature'
7a3b163 - EC2 Default User, 25 minutes ago : second?