タイトル: コミット履歴の確認
SEOタイトル: git log コミット履歴確認完全ガイド — oneline/graph/stat/blame
| この記事の要点 |
|
基本: git log
# 最新からデフォルト形式
git log
# 出力例
# commit a1b2c3d4e5f6...
# Author: Taro Yamada
# Date: Mon Jun 1 10:00:00 2026 +0900
#
# Add login feature
#
# commit 9z8y7x6w...
# ...
# 件数制限
git log -n 5
git log -5
# q で終了 (less / pager 上で動作)
よく使うフォーマット
# 1 行サマリ
git log --oneline
# a1b2c3d (HEAD -> main) Add login feature
# 9z8y7x6 Refactor auth
# ...
# グラフ表示(ブランチが見える)
git log --oneline --graph --all --decorate
# * a1b2c3d (HEAD -> main, origin/main) Add login
# | * 7654321 (feature/x) WIP
# |/
# * 9z8y7x6 Initial commit
# 統計付き(変更ファイル数・行数)
git log --stat
# 差分付き(パッチ)
git log -p
# 差分 + 統計
git log -p --stat
カスタムフォーマット (--pretty=format)
# 自由なフォーマット
git log --pretty=format:"%h %ad | %s (%an)" --date=short
# a1b2c3d 2026-06-01 | Add login feature (Taro)
# 色付き
git log --pretty=format:"%C(yellow)%h%Creset %C(green)%ad%Creset | %s %C(blue)<%an>%Creset" --date=short --graph
# プレースホルダ
# %H full hash %h short hash
# %an author name %ae author email
# %ad date %ar relative date
# %s subject %b body
# %d ref names %D ref names (no parens)
# alias 化
git config --global alias.lg \
"log --color --graph --pretty=format:'%C(yellow)%h%Creset -%C(red)%d%Creset %s %C(green)(%cr) %C(blue)<%an>%Creset' --abbrev-commit"
git lg
フィルタ機能
| 用途 | オプション |
|---|---|
| 著者で絞り込み | --author="Taro" |
| コミッタで絞り込み | --committer="..." |
| メッセージ検索 | --grep="fix" |
| 差分内容検索 | -S "function_name" |
| 正規表現で差分検索 | -G "pattern" |
| 期間 | --since="2 weeks ago" --until="yesterday" |
| ファイル/パス限定 | git log -- src/login.php |
| マージコミット除外 | --no-merges |
| マージのみ | --merges |
| ブランチ間差 | git log main..feature |
# 自分のコミットを今月分
git log --author="$(git config user.name)" --since="this month" --oneline
# 特定ファイルの変更履歴
git log -p -- src/Login.php
# 関数名を含む差分検索
git log -S "validatePassword" --oneline
# main にあって feature には無いコミット
git log main..feature --oneline
# 2 ブランチの対称差
git log main...feature --left-right --oneline
git show: 1 コミットの詳細
# HEAD のコミット
git show
# 特定コミット
git show a1b2c3d
git show HEAD~3 # 3 つ前
# ファイルの内容を見る
git show HEAD:src/Login.php
git show a1b2c3d:README.md > readme-old.md
# 変更ファイル名だけ
git show --stat a1b2c3d
git show --name-only a1b2c3d
git blame: 行ごとの最終変更
# どの行を誰がいつ変更したか
git blame src/Login.php
# 出力
# a1b2c3d (Taro 2026-05-01 10:00:00 +0900 1)
git reflog: HEAD の動きを全部追う
reset --hard / rebase / checkout で消えたように見えるコミットも、reflog に残っています(既定 90 日)。
# HEAD の動き
git reflog
# a1b2c3d HEAD@{0}: commit: Add login
# 9z8y7x6 HEAD@{1}: reset --hard: moving to HEAD~1
# 7654321 HEAD@{2}: commit: WIP feature
# ...
# 消したコミットを復活
git reset --hard HEAD@{2}
# または
git checkout 7654321
# ブランチごとの reflog
git reflog show feature/login
# 既定期限を変更
git config --global gc.reflogExpire "180 days"
GUI ツール
| ツール | 特徴 |
|---|---|
gitk | Git 同梱の TK ベース GUI。軽量 |
git gui | 同じく同梱。コミット作成中心 |
| Sourcetree | Atlassian 製、無料、Windows/Mac |
| Fork | 軽快な GUI、有償 |
| GitKraken | クロスプラットフォーム、Pro 機能あり |
| VS Code + GitLens | エディタ統合、行単位の blame inline 表示 |
| JetBrains IDE 統合 | IntelliJ/PhpStorm の Git ツールウィンドウ |
| tig | ターミナル UI(curses) |
| GitHub Insights → Commits | Web 上で履歴/グラフ確認 |
ブランチごとの最新コミットを一覧
# 全ブランチの先頭コミット
git branch -v
# 全リモートブランチ含む
git branch -av
# 最後に活動があった順
for branch in $(git branch -r --no-merged | grep -v HEAD); do
echo -e "$(git log --pretty=format:'%ci %an' -1 $branch) \t$branch"
done | sort -r | head -20
FAQ
Q: git log のページャを抜けたい
A: q を押す(less の操作)。永久に無効化したいなら git --no-pager log や export GIT_PAGER=cat。
Q: マージで巨大ファイルが入って履歴が汚い
A: git log --no-merges でマージコミット除外、git log --first-parent で main の歴史だけ表示。
Q: 削除されたファイルの履歴を見たい
A: git log --all --full-history -- path/to/deleted/file。ファイルがリネーム移動した場合は --follow も付ける。