【Git】logの見方

コミットの履歴を振り返ることは、Gitを使っていくうえで必要不可欠です。
今回は過去のコミット履歴を振り返られる、git log コマンドについて解説します。

## 基本の使い方
単純な使い方はこれだけ。

```
git log
```

コマンドを実行すると、このような表示になります。

```
commit a2bb8f80c3048714c677fe15d716bfa227b14a01 (HEAD -> master, origin/master)
Author: user <user@gmail.com>
Date:   Sat May 16 10:00:00 2020 +0900

    commit message
    
commit xxxx....
```

そのリポジトリの新しいコミットから順に、コミットのSHA値、コミット者、コミット日次、メッセージが表示されます。
そのコミットを指しているブランチがあれば、そのブランチ名も表示してくれます。

## オプションまとめ
git log には多くのオプションがあります。欲しい情報に応じてオプションを使い分けられると、より一層便利に感じられます。

### コミット時の変更内容を知りたい

```
git log -p
```


```
commit a2bb8f80c3048714c677fe15d716bfa227b14a01 (HEAD -> master, origin/master)
Author: user <user@gmail.com>
Date:   Sat May 16 10:00:00 2020 +0900

    commit message

diff --git a/change.txt b/change.txt
index 481ade4..d90ab66 100644
--- a/change.txt
+++ b/change.txt
@@ -0,0 +0,0 @@ 
-    消された文字
+    足された文字
```

そのコミットの変更内容をdiffのように出力してくれます。

### 変更があったファイルの一覧が見たい

```
git log --stat
```


```
commit a2bb8f80c3048714c677fe15d716bfa227b14a01 (HEAD -> master, origin/master)
Author: user <user@gmail.com>
Date:   Sat May 16 10:00:00 2020 +0900

    commit message

change.txt                                      |   2 +-
add.txt                                         |   3 ++
delete.txt                                      |   3 --
3 files changed, 4 insertions(+), 4 deletions(-)
```

そのコミットで変更のあったファイルとその行数を一覧表示します。
個人的によく使うオプションNo.1

ちなみに、shortstatというオプションを使うと、最後の集計の行(3 files changed,...)のみを出力してくれます。

```
git log --shortstat

```

またまたちなみに、下記のオプションを使うと、変更があったファイル名のみを一覧表示してくれます。

```
git log --name-only
```

上記の--statだと、表示のフォーマットが決まっている影響で、ファイルパスが長くなると先頭の方が省略されてしまうのです。
こちらのオプションだと、変更量は表示されない代わりに、必ずフルパスで表示してくれるので、用途によってはこちらのほうが便利な場合も。

### 表示フォーマットを変えたい

```
git log --pretty=<表示フォーマット>
```

表示フォーマットを自由に設定してログを表示させることができます。
表示フォーマットは、オプションを組み合わせて記載したり、すでに用意されているエイリアスを使用することもできます。
例えば、表示フォーマットにonelineを設定した場合は、

```
a2bb8f80c3048714c677fe15d716bfa227b14a01 (HEAD -> feature) update source
ab22eba9c7f7ce509295cd9eb53f6bc2e90fe5da add source
afdef3dcded8f4090cab13ee4c3f72b80db5a385 Initial commit
```

このように、1つのコミットを1行で表示することができます。

自由なフォーマットで表示させるのはこんな感じ。

```
git log --pretty=format:"%h [%an] %s"
```


```
a2bb8f8 [user] commit message
```

%hはコミットのハッシュ値(短縮版)、%anはコミットしたユーザの名前、%sはコミットメッセージを表します。
ほかにも使用できるオプションは多くあるので、お気に入りの表示になるようにいろいろ試してみてください！

### 樹形図を表示させたい

```
git log --oneline --graph
```

```
#   406045a Merge pull request #1 from feature
|\
| # 33ad750 (origin/feature, feature) update source
| # cb0e5e0 add source
|/
# 611aa41 Initial commit
```

コミット同士のつながりを示す樹形図をアスキーグラフで表現してくれます。
樹形図を表示させるのは--graphというオプションなのですが、--onelineと組み合わせて使ってあげないと、樹形図としてみるにはしんどいくらい縦長になってしまいます。

### 表示するログを絞り込みたい
条件によるログの絞り込みができます。
いろいろあるので、いくつか例をご紹介。

・表示件数を絞る

```
git log -3
```

この場合は3件だけ表示されます。

・期間で絞る

```
git log --since="2020/04/01" --until="2020/04/30"
```

・特定のファイルが更新されたログのみ

```
git log path/to/file.txt
```

・コミットしたユーザで絞る

```
git log --author="user"
```

・コミットメッセージからgrep

```
git log --grep="fix"
```

・マージコミットのみ表示

```
git log --merges
```

反対にマージコミットを非表示

```
git log --no-merges
```


<hr/>
様々なオプションを紹介しましたが、これらはすべて組み合わせて使えるものです。
組み合わせを試してみて、お気に入りのログ表示を見つけてみてください！





<br><br><br>
普通にログ見るだけならGitHubで十分だよな～。。。