「あの変更っていつ入ったんだっけ?」「このバグを入れたコミットを特定したい」。チーム開発をしていると、コミット履歴から必要な情報を素早く見つけたい場面がよくありますよね。
git logはGitの標準コマンドですが、オプションを使いこなせば履歴検索の効率が大きく変わります。この記事では基本的な使い方から、日付・作成者・コード変更でのフィルタリング、見やすいカスタム表示まで実践的なテクニックを紹介します。
git logとは
git logはGitリポジトリのコミット履歴を表示するコマンドです。現在のブランチから親コミットをたどり、逆時系列順(新しい順)でコミット情報をリスト表示します。
デフォルトでは各コミットのハッシュ、作成者、日時、コミットメッセージが表示されます。しかしgit logの真価は豊富なオプションにあり、表示形式のカスタマイズや条件によるフィルタリングを組み合わせることで、大量のコミット履歴から必要な情報を効率的に抽出できます。
# 基本的な実行
git logこのコマンドを実行すると、以下のような出力が表示されます。
commit a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0
Author: John Doe <john@example.com>
Date: Fri Jan 10 10:30:00 2026 +0900
ユーザー認証機能を追加基本的な表示オプション
まずは日常的によく使う表示オプションから見ていきましょう。
表示件数を制限する
全履歴を見る必要がない場合は-nオプション(または-数字の省略形)で表示件数を制限できます。
# 最新の5件だけ表示
git log -5
# 同じ意味(-nの省略形)
git log -n 51行表示でコンパクトに
--onelineオプションを使うと、各コミットが1行で表示されます。短縮ハッシュとコミットメッセージの1行目だけが出力されるため、履歴の概要を素早く把握するのに便利です。
git log --oneline出力例は以下のようになります。
a1b2c3d ユーザー認証機能を追加
b2c3d4e ログイン画面のスタイル修正
c3d4e5f READMEを更新ブランチの分岐をグラフ表示
--graphオプションを追加すると、ブランチの分岐やマージがASCII文字のグラフで視覚化されます。--allと組み合わせれば全ブランチの履歴を確認できます。
# グラフ付きで全ブランチを表示
git log --oneline --graph --all出力例を見てみましょう。
* e5f6g7h Merge branch 'feature'
|\
| * d4e5f6g feature: 新機能を実装
| * c3d4e5f feature: テストを追加
|/
* b2c3d4e main: 設定ファイルを更新
* a1b2c3d main: 初期コミットブランチ・タグ名を表示
--decorateオプションを使うと、各コミットに紐づくブランチ名やタグ名が表示されます。どのコミットがどのブランチの先頭なのかが一目でわかります。
git log --oneline --decorate出力は以下のようになります。
a1b2c3d (HEAD -> main, origin/main) 最新のコミット
b2c3d4e (tag: v1.0.0) バージョン1.0.0リリースファイル変更の統計情報
--statオプションを追加すると、各コミットでどのファイルが何行変更されたかの統計が表示されます。
git log --stat -3出力例は以下の通りです。
commit a1b2c3d
Author: John Doe <john@example.com>
Date: Fri Jan 10 10:30:00 2026 +0900
ユーザー認証機能を追加
src/auth.js | 45 ++++++++++++++++++++++++++++++++++++
src/login.js | 12 ++++------
2 files changed, 51 insertions(+), 6 deletions(-)差分(パッチ)を表示
-p(または--patch)オプションを使うと、各コミットの実際のコード差分が表示されます。どの行が追加・削除されたかを確認したいときに使います。
# 最新3件の差分を表示
git log -p -3フィルタリングオプション
大量のコミット履歴から必要な情報を探すには、フィルタリングオプションが不可欠です。
日付で絞り込む
--since(または--after)と--until(または--before)で期間を指定できます。日付の書き方は柔軟で、相対的な表現も使えます。
# 過去1週間のコミット
git log --since="1 week ago"
# 過去2週間のコミット
git log --since="2 weeks ago"
# 特定の期間
git log --after="2026-01-01" --before="2026-01-31"
# 昨日以降のコミット
git log --since="yesterday"作成者で絞り込む
--authorオプションで特定の作成者のコミットだけを表示できます。部分一致で検索され、正規表現も使えます。
# 名前に"John"を含む作成者
git log --author="John"
# 複数の作成者(正規表現)
git log --author="John\|Mary"
# メールアドレスで検索
git log --author="@example.com"コミットメッセージで検索
--grepオプションでコミットメッセージに特定のテキストを含むコミットを検索できます。チケット番号やキーワードでの検索に便利です。
# "bugfix"を含むコミット
git log --grep="bugfix"
# 大文字小文字を区別しない
git log --grep="BugFix" -i
# 正規表現で検索
git log --grep="ISSUE-[0-9]\+"コード変更で検索(pickaxe)
-Sオプション(通称pickaxe)は、特定の文字列が追加または削除されたコミットを検索します。「この関数はいつ追加されたのか」「この変数はいつ削除されたのか」を調べるのに非常に強力です。
# "calculateTotal"という文字列が追加/削除されたコミット
git log -S"calculateTotal"
# 差分も一緒に表示
git log -S"calculateTotal" -p正規表現で検索したい場合は-Gオプションを使います。
# 正規表現でマッチするコード変更
git log -G"API.*endpoint"特定ファイルの履歴
ファイルパスを指定すると、そのファイルに関するコミットだけが表示されます。パスの前に--を付けるのが慣例です。
# 特定ファイルの変更履歴
git log -- src/auth.js
# 複数ファイル
git log -- src/auth.js src/login.js
# ディレクトリ指定
git log -- src/components/ファイルがリネームされた場合も追跡したいときは--followオプションを追加します。
# リネーム前の履歴も含めて表示
git log --follow -- src/auth.jsマージコミットの除外
レビュー時などマージコミットを除外したい場合は--no-mergesを使います。
git log --no-mergesブランチ間の比較
2つのブランチ間でどのコミットが異なるかを調べるには、範囲指定の記法を使います。
差分コミットを表示
..(ドット2つ)を使うと、一方のブランチにあって他方にないコミットを表示できます。
# mainにはなくfeatureブランチにあるコミット
git log main..feature
# リモートと比較(pushしていないコミット)
git log origin/main..HEAD対称差分を表示
...(ドット3つ)を使うと、どちらか片方にのみ存在するコミット(両方に共通でないコミット)が表示されます。
# mainとfeatureの対称差分
git log main...featureカスタムフォーマット
--pretty=format:を使うと、出力形式を自由にカスタマイズできます。プレースホルダーを組み合わせて必要な情報だけを表示しましょう。
よく使うプレースホルダーは以下の通りです。
| プレースホルダー | 内容 |
|---|---|
%H / %h | コミットハッシュ(完全/短縮) |
%an | 作成者名 |
%ae | 作成者メールアドレス |
%ad | 作成日時 |
%ar | 作成日時(相対表示) |
%s | コミットメッセージ(1行目) |
%d | ブランチ/タグ名 |
%Cred, %Cgreen, %Creset | 色指定 |
実際の使用例を見てみましょう。
# シンプルなカスタム表示
git log --pretty=format:"%h - %an, %ar : %s"出力は以下のようになります。
a1b2c3d - John Doe, 2 hours ago : ユーザー認証機能を追加
b2c3d4e - Jane Smith, 1 day ago : ログイン画面のスタイル修正色を付けるとさらに見やすくなります。
# カラー付きフォーマット
git log --pretty=format:"%Cred%h%Creset - %s %Cgreen(%ar) %C(bold blue)<%an>%Creset"便利なエイリアス設定
よく使うオプションの組み合わせはエイリアスとして登録しておくと便利です。以下は定番のgit lgエイリアスです。
# エイリアスを設定
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"設定後はgit lgで見やすいグラフ表示が使えます。
# 現在のブランチ
git lg
# 全ブランチ
git lg --all
# 最新10件
git lg -10実践的な使用シーン
ここまで紹介したオプションを組み合わせた実践例を見てみましょう。
今週自分がコミットした内容を確認
git log --author="$(git config user.name)" --since="1 week ago" --oneline特定の機能に関するコミットを追跡
git log --grep="認証" --oneline --statバグの原因コミットを特定
特定のコードがいつ追加されたかを調べる例です。
git log -S"buggyFunction" -pリリース間の変更一覧
タグ間のコミットを確認する例です。
git log v1.0.0..v1.1.0 --oneline --no-merges複雑な条件での検索
過去1ヶ月、特定の作成者、マージ以外のコミットを検索する例です。
git log --since="1 month ago" --author="John" --no-merges --oneline --graph関連コマンド
git log以外にも履歴を調べるのに便利なコマンドがあります。
git shortlogは作成者ごとにコミットを集計します。リリースノートの作成やチームの貢献度を確認するのに便利です。
# 作成者ごとのコミット数
git shortlog -sngit showは特定のコミットの詳細を表示します。
# 特定コミットの詳細
git show a1b2c3dgit blameはファイルの各行がどのコミットで変更されたかを表示します。
# 各行の最終変更者を表示
git blame src/auth.jsgit reflogはHEADの移動履歴を表示します。git resetで消えたコミットを復元するときなどに使います。
# HEADの移動履歴
git reflogよくある質問
git logの出力が長くて見づらい場合は?
-nオプションで件数を制限するか、--onelineでコンパクトに表示しましょう。ページャーを終了するにはqキーを押します。
特定のコミットの詳細だけを見たい場合は?
git show <コミットハッシュ>を使います。git logは履歴の一覧表示、git showは特定コミットの詳細表示という使い分けです。
リモートブランチの履歴を見るには?
git fetchで最新情報を取得してから、git log origin/mainのようにリモートブランチ名を指定します。
まとめ
git logはオプションを組み合わせることで、プロジェクトの履歴から必要な情報を効率的に抽出できます。まずは--onelineと--graphで見やすい表示に慣れ、次に--authorや--sinceでのフィルタリング、そして-Sオプション(pickaxe)でのコード変更検索を覚えると、デバッグやコードレビューの効率が大きく向上します。
よく使う組み合わせはエイリアスとして登録しておくのがおすすめです。git lgエイリアスを設定するだけでも日常の作業が快適になるでしょう。
参考リンク
Git – git-log Documentation – 公式ドキュメント。全オプションの詳細な説明が記載されています。
Advanced Git Log | Atlassian Git Tutorial – フォーマットとフィルタリングの実践的な使い方を解説。
git-tips/tips – GitHubで21.7kスターの人気リポジトリ。git logを含むGit全般のtipsを収録。



