[Git] log コマンドの復習（思ったより多機能で優秀）

こんにちは！

普段から使ってる `git log` コマンド。
今まで特にオプションを使ってなかったので、ちょっと掘り下げてみます。

自分が思ってた以上に多機能で、かなり優秀です。
使いこなした方が良さそうです。

ネタ元は[こちら](https://git-scm.com/docs/git-log)

# 基本的な使い方

```bash
git log
```

出力例:
```bash
% git log
commit aa99d9bbe75cca773d50f8cf77d8b25814890806 (HEAD -> TASK_MNG-2)
Author: menber1 <member1@gmail.com>
Date:   Tue Oct 8 00:58:58 2024 +0900

    レポート機能追加

commit 67a81df9128a78004f2ed41d85ee3d410b390eec (origin/main, main)
Author: member2 <member2@gmail.com>
Date:   Mon Sep 2 21:41:51 2024 +0900

    readmeを修正

commit f9ebb657506c76c77d981374e2ac241c2ffdf84b
Author: member2 <member2@gmail.com>
Date:   Mon Sep 2 21:28:51 2024 +0900

    チャット機能を仮実装

```
コミットの詳細情報（ハッシュ値、作者、日時、コミットメッセージ）が表示されます。

### よく使いそうなやつ

#### 1. コミットの要約表示
```bash
git log --oneline
```
出力例:
```
% git log --oneline
aa99d9b (HEAD -> TASK_MNG-2) レポート機能追加
67a81df (origin/main, main) readmeを修正
f9ebb65 チャット機能を仮実装
```

#### 2. 変更内容の詳細表示
```bash
git log -p
```

出力例:
```bash
% git log -p
commit aa99d9bbe75cca773d50f8cf77d8b25814890806 (HEAD -> TASK_MNG-2)
Author: member1 <member1@gmail.com>
Date:   Tue Oct 8 00:58:58 2024 +0900

    レポート機能追加

diff --git a/src/Format.css b/src/Format.css
new file mode 100644
index 0000000..7babe42
--- /dev/null
+++ b/src/Format.css
@@ -0,0 +1,123 @@
+.generated-report {
+  width: 100%;
+  box-sizing: border-box;
+}
+
+.file-upload-section {
+  margin: 20px 0;
+}
+
.....
```
各コミットでの具体的な変更内容（差分）が表示されます。

#### 3. 表示件数の制限
```bash
git log -n 5  # 最新の5件のみ表示
```

#### 4. 特定のファイルの履歴表示
```bash
git log filename.txt
```

#### 5. マージ履歴の確認
```bash
git log --merges  # マージコミットのみ表示
```

#### 6. コミットメッセージの検索
```
git log --grep="キーワード"
```

出力例:
```bash
% git log --grep="修正"
commit 67a81df9128a78004f2ed41d85ee3d410b390eec (origin/main, main)
Author: member2 <member2@gmail.com>
Date:   Mon Sep 2 21:41:51 2024 +0900

    readmeを修正
```
「修正」とか「削除」などで検索するケースが多そうですね。


#### 7. 特定のキーワードが含まれるコミットの検索
```bash
git log -S"キーワード"  # 変更内容をキーワードにして検索
```
単なる文字列検索ではなく、その文字列の「出現回数が変化した」コミットを見つけることができます。例えば、
```bash
git log -S"API_KEY"
```
で検索すると、
- API_KEY が追加されたコミット
- API_KEY が更新されたコミット
- API_KEY が削除されたコミット

を見つけることができます。（--grepとは異なる）

#### 8. 特定のキーワードが含まれるコミットの検索（正規表現）
```bash
git log -G"正規表現"  # 変更内容を正規表現にして検索
```
-Sの正規表現版です。

### その他、知っとくと良さそうなもの

#### 1. 期間を指定して検索
```bash
git log --since="1 week ago"  # 1週間前からの変更
git log --until="2023-12-31"  # 指定日までの変更
```

#### 2. 作者による検索
```bash
git log --author="Tanaka"
```
名前の一部だけでもOK。

#### 3. グラフィカルな履歴表示
```bash
git log --graph --oneline --decorate
```
ブランチの分岐・マージが視覚的に確認できます。

#### 4. 変更統計の表示
```bash
git log --stat
```
出力例:
```
% git log --stat
commit aa99d9bbe75cca773d50f8cf77d8b25814890806 (HEAD -> TASK_MNG-2)
Author: member1 <member1@gmail.com>
Date:   Tue Oct 8 00:58:58 2024 +0900

    レポート機能追加

 src/Format.css          | 123 ++++++++++++++++++++++
 src/Format.tsx          | 268 ++++++++++++++++++++++++++++++++++++++++++++++++
 src/ReportGenerator.tsx | 103 ++++++++-----------
 src/SettingModal.tsx    | 249 +++++++++++++++++++++++++-------------------
 src/SettingsModal.css   | 239 ++++++++++++++++++++++++++----------------
 src/types.ts            |  11 +-
 6 files changed, 743 insertions(+), 250 deletions(-)


```

# まとめ
`git log` コマンド、いかかでしたでしょうか。
思ったより多機能ですよね。

過去のコミットについて調査するケースは多いと思うので、このコマンドを使いこなせば、調査が楽になりそうです。