【Git】コミット履歴の閲覧

# はじめ
　　最近、gitのドキュメントを読んでいます。
　　git履歴を確認することは現場でよく行うことです。
　　履歴を読み取ることは重要なので、勉強しました。
　　また、今後の復習のため、ポイントをメモしました。

参考先：[gitドキュメント](https://git-scm.com/book/ja/v2/Git-%E3%81%AE%E5%9F%BA%E6%9C%AC-%E3%82%B3%E3%83%9F%E3%83%83%E3%83%88%E5%B1%A5%E6%AD%B4%E3%81%AE%E9%96%B2%E8%A6%A7)

# 2.3 コミット履歴の閲覧
## コミット履歴の閲覧

コミットを新しい順に表示する。↓
```
$ git log 
```
表示内容：
- 各コミットについてSHA-1チェックサム
- 作者名
- メールアドレス
- コミット日時
- コミットメッセージ

「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 (独自フォーマットを設定する) を指定可能 |



各コミットで反映された変更点を表示する。↓
例えば、直近の２エントリだけを出力する。（ログ出力の制限のところで説明）
```
$ git log -p -2
```
表示内容：
- 「git log」と同じ情報を表示する
- diffを表示する

### 統計情報を確認↓
オプション --stat
```
$ git log --stat
```
表示内容：
- 各コミットエントリに続けて変更されたファイルの一覧
- 変更されたファイルの数、追加・削除された行数が表示される

### ログをデフォルトの書式以外で出力する。↓
```
$ git log --pretty=oneline
```
--prettyのオプション
- oneline：各コミットを1行で出力する
- short
- full
- fuller
- format：独自のログ出力フォーマットを指定する
```
$ git log --pretty=format:"%h - %an, %ar:%s"
ca82a6d - Scott Chacon, 6 years ago : changed the version number
```

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  |  件名  ||

oneline と format のオプション --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
```

ログ出力の制限
コミットの一部だけを表示する


「git log」の出力を制限するためのオプション
| オプション | 説明 | コマンド例 |
| --- | --- | --- |
| -(n) | 直近の n 件のコミットのみを表示する | $ git log -2 |
| --since, --after | 指定した日付より後に作成されたコミットのみに制限する(特定の日、相対日付可能) | $ git log --since=2.weeks |
| --until, --before | 指定した日付より前に作成されたコミットのみに制限する(特定の日、相対日付可能) | $ git log --before="2008-11-01" |
| --author | エントリが指定した文字列にマッチするコミットのみを表示する | $ git log --author=gitster |
| --committer | エントリが指定した文字列にマッチするコミットのみを表示する |  |
| --grep | 指定した文字列がコミットメッセージに含まれているコミットのみを表示する |  |
| -S | 指定した文字列をコードに追加・削除したコミットのみを表示する | $ git log -Sfunction_name |
補足：
- 特定の日 "2018-01-15" 相対日付 "2 years 1 day 3 minutes ago"
- author と grep を両方指定する場合は、`--all-match`オプションも一緒に使ってください。 そうしないと、どちらか一方にだけマッチするものも対象になっている