TAKASHI YAMASHINA software engineer

git logの使い方と便利なオプション

git logは、コミット履歴を表示するコマンドです。誰が、いつ、何を変更したかを確認できます。様々なオプションで表示形式や絞り込みを調整できます。

基本的な使い方

コミット履歴を表示

bash
git log

出力例:

plain
commit a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0
Author: John Doe <john@example.com>
Date:   Mon Jan 6 10:30:00 2025 +0900

    Add user authentication feature

commit b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0u1
Author: Jane Smith <jane@example.com>
Date:   Sun Jan 5 15:20:00 2025 +0900

    Fix login bug

1行で表示

bash
git log --oneline

出力例:

plain
a1b2c3d Add user authentication feature
b2c3d4e Fix login bug
c3d4e5f Update README
d4e5f6g Initial commit

グラフ表示

bash
git log --graph --oneline --all

出力例:

plain
* a1b2c3d (HEAD -> main) Merge branch 'feature'
|\
| * b2c3d4e (feature) Add feature B
| * c3d4e5f Add feature A
|/
* d4e5f6g Fix bug
* e5f6g7h Initial commit

よく使うオプション

--oneline: 1行で表示

bash
git log --oneline

--graph: グラフ表示

bash
git log --graph
bash
git log --graph --oneline

--all: すべてのブランチを表示

bash
git log --all
bash
git log --graph --oneline --all

--decorate: 参照情報を表示

bash
git log --decorate

-n, --max-count: 表示件数を制限

bash
# 最新の5件だけ表示
git log -n 5
# または
git log -5

--since, --until: 日付範囲で絞り込み

bash
# 1週間以内のコミット
git log --since="1 week ago"

# 特定の日付以降
git log --since="2025-01-01"

# 期間を指定
git log --since="2025-01-01" --until="2025-01-07"

# 相対的な指定
git log --since="2 weeks ago" --until="3 days ago"

--author: 作者で絞り込み

bash
# 特定の作者のコミット
git log --author="John"

# 複数の作者(正規表現)
git log --author="John\|Jane"

# メールアドレスで検索
git log --author="john@example.com"

--grep: コミットメッセージで検索

bash
# "fix"を含むコミット
git log --grep="fix"

# 大文字小文字を区別しない
git log --grep="fix" -i

# 複数のキーワード(OR)
git log --grep="fix\|bug"

# 複数のキーワード(AND)
git log --grep="fix" --grep="login" --all-match

-p, --patch: 差分を表示

bash
git log -p
bash
# 最新のコミットの差分のみ
git log -p -1

--stat: 統計情報を表示

bash
git log --stat

出力例:

plain
commit a1b2c3d
Author: John Doe <john@example.com>
Date:   Mon Jan 6 10:30:00 2025 +0900

    Add user authentication

 src/auth.js    | 45 +++++++++++++++++++++++++++++++++++++++++++++
 tests/auth.js  | 23 +++++++++++++++++++++++
 2 files changed, 68 insertions(+)

--pretty: フォーマット指定

bash
# 短縮形式
git log --pretty=oneline
git log --pretty=short
git log --pretty=full

# カスタムフォーマット
git log --pretty=format:"%h - %an, %ar : %s"

フォーマット指定子:

--follow: ファイルのリネームを追跡

bash
# ファイルの履歴をリネーム前まで遡る
git log --follow -- path/to/file.js

--: 特定のファイルの履歴

bash
# 特定のファイルに関するコミットのみ
git log -- src/app.js

# 複数のファイル
git log -- src/app.js src/utils.js

# ディレクトリ
git log -- src/

実践的な使い方

最近のコミットを確認

bash
# 最新の10件を1行で
git log --oneline -10

ブランチの分岐を確認

bash
# すべてのブランチをグラフ表示
git log --graph --oneline --all --decorate

特定の作者の作業を確認

bash
# Johnさんの今週のコミット
git log --author="John" --since="1 week ago" --oneline

バグ修正のコミットを探す

bash
# "fix"または"bug"を含むコミット
git log --grep="fix\|bug" -i --oneline

ファイルがいつ変更されたか調べる

bash
# ファイルの変更履歴と差分
git log -p -- src/app.js

# ファイルの変更履歴(統計情報付き)
git log --stat -- src/app.js

マージコミットを除外

bash
git log --no-merges

マージコミットのみ表示

bash
git log --merges

フィルタリング

日付で絞り込み

bash
# 今日のコミット
git log --since="midnight"

# 昨日のコミット
git log --since="yesterday" --until="midnight"

# 先月のコミット
git log --since="1 month ago" --until="1 week ago"

# 特定の日のコミット
git log --since="2025-01-06" --until="2025-01-07"

作者とコミッターで絞り込み

bash
# 作者で絞り込み
git log --author="John"

# コミッターで絞り込み(マージを実行した人)
git log --committer="Jane"

ファイルの変更内容で絞り込み

bash
# 特定の関数を変更したコミット
git log -S "function_name"

# 特定の正規表現にマッチする変更
git log -G "regex_pattern"

パスで絞り込み

bash
# src/ディレクトリの変更
git log -- src/

# 特定の拡張子
git log -- "*.js"

# 複数のパス
git log -- src/ tests/

フォーマットのカスタマイズ

よく使うカスタムフォーマット

bash
# ハッシュ、作者、日付、メッセージ
git log --pretty=format:"%h - %an, %ad : %s" --date=short

# より詳細な情報
git log --pretty=format:"%C(yellow)%h%Creset - %C(cyan)%an%Creset, %C(green)%ar%Creset : %s"

カラー指定:

エイリアスで定義

[alias]
  lg = log --graph --pretty=format:'%C(yellow)%h%Creset -%C(cyan)%d%Creset %s %C(green)(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative

使用例:

bash
git lg

範囲指定

コミット範囲を指定

bash
# コミットAからコミットBまで
git log commit-a..commit-b

# ブランチ間の差分
git log main..feature

# featureにあってmainにないコミット
git log main..feature

# mainにあってfeatureにないコミット
git log feature..main

特定のコミット以降

bash
# 特定のコミット以降
git log commit-hash..HEAD

# 特定のタグ以降
git log v1.0.0..HEAD

他のコマンドとの組み合わせ

git showと組み合わせる

bash
# logで履歴を確認
git log --oneline

# 特定のコミットの詳細を確認
git show a1b2c3d

git diffと組み合わせる

bash
# 2つのコミット間の差分
git log --oneline
git diff a1b2c3d..b2c3d4e

git blameと組み合わせる

bash
# ファイルの履歴を確認
git log -- file.js

# 各行の変更者を確認
git blame file.js

git checkoutと組み合わせる

bash
# 過去のコミットを確認
git log --oneline

# 特定のコミットをチェックアウト
git checkout a1b2c3d

よくあるパターン

リリース準備

bash
# 前回のリリース以降の変更
git log v1.0.0..HEAD --oneline

# 変更ファイルの統計
git log v1.0.0..HEAD --stat

# 各作者の貢献
git log v1.0.0..HEAD --author="John" --oneline

コードレビュー

bash
# プルリクエストの変更内容
git log main..feature -p

# 変更ファイルの一覧
git log main..feature --name-only

トラブルシューティング

bash
# 最近の変更を確認
git log -10 --stat

# 特定のファイルの最近の変更
git log -5 -p -- problematic-file.js

# バグが混入したコミットを探す
git log --since="1 week ago" --grep="feature-x" --oneline

チームの活動を確認

bash
# 今週のチーム全体の活動
git log --since="1 week ago" --all --oneline

# 各メンバーのコミット数
git shortlog -sn --since="1 week ago"

# 詳細な統計
git log --since="1 week ago" --author="John" --stat

便利なコマンド

git shortlog

bash
# 作者ごとのコミット数
git shortlog -sn

# 作者ごとのコミット一覧
git shortlog

# メールアドレス付き
git shortlog -sne

オプション:

git reflog

bash
# HEADの移動履歴
git reflog

ベストプラクティス

1. エイリアスを設定する

[alias]
  l = log --oneline
  lg = log --graph --oneline --all
  ll = log --graph --pretty=format:'%C(yellow)%h%Creset -%C(cyan)%d%Creset %s %C(green)(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
  ls = log --stat
  lp = log -p

2. 目的に応じてオプションを使い分ける

bash
# 素早く確認
git log --oneline -10

# 詳細に確認
git log -p -1

# 全体像を把握
git log --graph --oneline --all

# 統計情報
git log --stat --since="1 week ago"

3. フィルタリングを活用する

bash
# 作者で絞り込み
git log --author="John" --since="1 week ago"

# ファイルで絞り込み
git log -- src/critical-file.js

# メッセージで検索
git log --grep="security" -i

4. グラフ表示を習慣化

bash
# ブランチ構造を常に意識
git log --graph --oneline --all

5. ページャーを活用

bash
# less(デフォルト)で表示
git log

# lessの操作
# - スペース: 次のページ
# - b: 前のページ
# - /: 検索
# - q: 終了

よくある質問

Q: コミットが多すぎて見づらい

bash
# 件数を制限
git log -10

# 1行表示
git log --oneline

# 特定の期間のみ
git log --since="1 week ago"

Q: ブランチの分岐がわからない

bash
# グラフ表示
git log --graph --oneline --all

Q: 誰が変更したか知りたい

bash
# 作者で絞り込み
git log --author="John"

# または特定のファイルの変更者
git blame file.js

Q: 削除されたコミットを復元したい

bash
# reflogで履歴を確認
git reflog

# コミットを復元
git cherry-pick <commit-hash>

Q: マージコミットが邪魔

bash
# マージコミットを除外
git log --no-merges --oneline

よく使う組み合わせ

日常的な確認

bash
git log --oneline -10

ブランチ全体の把握

bash
git log --graph --oneline --all --decorate

詳細なレビュー

bash
git log -p --since="1 week ago" --author="John"

リリースノート作成

bash
git log v1.0.0..HEAD --oneline --no-merges

パフォーマンス調査

bash
git log --since="1 month ago" --stat --author="Team"

まとめ:覚えておくべきコマンド

bash
# 基本
git log                           # 履歴表示
git log --oneline                 # 1行表示
git log -n 10                     # 10件のみ

# 視覚化
git log --graph --oneline --all   # グラフ表示

# フィルタリング
git log --author="John"           # 作者で絞り込み
git log --since="1 week ago"      # 日付で絞り込み
git log --grep="fix"              # メッセージで検索
git log -- file.js                # ファイルで絞り込み

# 詳細表示
git log -p                        # 差分表示
git log --stat                    # 統計表示

# 範囲指定
git log main..feature             # ブランチ間の差分
git log v1.0.0..HEAD              # タグ以降の変更