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
- ブランチとマージの関係を視覚的に表示
--onelineと組み合わせると見やすい
bash
git log --graph --oneline
--all: すべてのブランチを表示
bash
git log --all
- 現在のブランチだけでなく、すべてのブランチの履歴を表示
--graphと組み合わせると全体像が把握できる
bash
git log --graph --oneline --all
--decorate: 参照情報を表示
bash
git log --decorate
- ブランチ名、タグ名、HEAD位置を表示
- 最近のGitではデフォルトで有効
-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
- 各コミットの変更内容(diff)も表示
- コードレビューに便利
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"
フォーマット指定子:
%H: コミットハッシュ(完全版)%h: コミットハッシュ(短縮版)%an: 作者名%ae: 作者のメールアドレス%ad: 作者の日付%ar: 作者の相対日付(例:2 days ago)%s: コミットメッセージ(件名)%b: コミットメッセージ(本文)
--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"
カラー指定:
%C(red): 赤色%C(green): 緑色%C(blue): 青色%C(yellow): 黄色%C(cyan): シアン%Creset: 色をリセット
エイリアスで定義
[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
オプション:
-s: コミット数のみ-n: コミット数でソート-e: メールアドレスを表示
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 # タグ以降の変更