- Git
git logオプション一覧|見やすくするformat指定子とalias設定例
git log とは、コミットの履歴を新しい順に表示するコマンドです。git log --oneline --graph --all で全ブランチの流れが1画面に収まり、--format と alias を組み合わせると、毎回短いコマンドで見やすい履歴が出せます。
この記事では、作者と日時を固定したサンプルリポジトリを作り、よく使うオプション18個をすべて実行した結果を載せています。さらに、--pretty=format の指定子の全一覧、そのまま貼れる alias の完成形、「この行をいつ誰が変えたか」を調べる手順(-S・-G・-L・--follow・blame)、そして間違えやすい A..B と A...B の違いを図と実行結果で説明します。
検証環境:Git 2.43.0(Ubuntu)。実行日は 2026-10-02 で、2 weeks ago のような相対日時は実行日によって変わります。
git logオプションの早見表(やりたいこと別)
| やりたいこと | コマンド |
|---|---|
| 1行1コミットで短く見る | git log --oneline |
| ブランチの分岐・合流を線で見る | git log --oneline --graph |
| 全ブランチを見る | git log --oneline --graph --all |
| ブランチ名・タグを横に出す | git log --oneline --decorate |
| 件数を絞る | git log -n 5(-5 も同じ) |
| 変更ファイルと行数を見る | git log --stat |
| 差分(パッチ)も見る | git log -p |
| 変更ファイル名だけ見る | git log --name-only(種別つきは --name-status) |
| 期間で絞る | git log --since="2026-09-01" --until="2026-09-30 23:59" |
| 作者で絞る | git log --author=Suzuki |
| メッセージで絞る | git log --grep="#12" |
| ある文字列が増えた・減ったコミット | git log -S 'TAX_RATE' |
| ある正規表現に合う行が変わったコミット | git log -G 'TAX_RATE = [0-9]+' |
| ファイルの履歴(名前変更をまたぐ) | git log --follow -- ファイル |
| 関数・行範囲の履歴 | git log -L :関数名:ファイル |
| マージを除く/マージだけ | git log --no-merges / git log --merges |
| main の流れだけ見る | git log --first-parent |
| B にあって A にないコミット | git log A..B |
| どちらか片方にだけあるコミット | git log --left-right A...B |
| 自由な形式で出す | git log --format='%h %as %an %s' |
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「git logオプション一覧|見やすくするformat指定子とalias設定例」
この記事で使うサンプルリポジトリ
作者と日時を固定しているので、同じ Git のバージョンなら誰が実行しても同じハッシュになります。 記事の結果を手元で再現したいときに使ってください。コミット署名(commit.gpgsign = true)を有効にしている環境では、署名の分だけハッシュが変わります。
#!/bin/bash
# mkrepo.sh:サンプルリポジトリ shop を作る(bash mkrepo.sh)
set -e
git init -q -b main shop && cd shop
git config user.name "Sato Hanako"; git config user.email "sato@example.com"
c() { # c 日時 作者名 メール メッセージ
GIT_AUTHOR_DATE="$1 +0900" GIT_COMMITTER_DATE="$1 +0900" \
GIT_AUTHOR_NAME="$2" GIT_AUTHOR_EMAIL="$3" GIT_COMMITTER_NAME="$2" GIT_COMMITTER_EMAIL="$3" \
git commit -q -m "$4"; }
printf 'def stock_count(items):\n return len(items)\n' > stock.py
echo "# shop" > README.md
git add . && c "2026-09-01 10:00" "Sato Hanako" sato@example.com "在庫数を数える関数を追加"
printf 'TAX_RATE = 8\n\ndef stock_count(items):\n return len(items)\n' > stock.py
git add . && c "2026-09-03 11:00" "Suzuki Taro" suzuki@example.com "税率の定数を追加"
git switch -q -c feature/search
echo "def search(q): return q" > search.py
git add . && c "2026-09-05 14:00" "Suzuki Taro" suzuki@example.com "検索機能を追加 #12"
echo "def search(q): return q.strip()" > search.py
git add . && c "2026-09-06 09:30" "Suzuki Taro" suzuki@example.com "検索語の前後の空白を除く #12"
git switch -q main
printf 'TAX_RATE = 10\n\ndef stock_count(items):\n return len([i for i in items if i["qty"] > 0])\n' > stock.py
git add . && c "2026-09-08 16:00" "Sato Hanako" sato@example.com "税率を10に変更し、在庫0を除外"
GIT_AUTHOR_DATE="2026-09-10 10:00 +0900" GIT_COMMITTER_DATE="2026-09-10 10:00 +0900" \
git merge -q --no-ff feature/search -m "Merge branch 'feature/search'"
git mv stock.py inventory.py
c "2026-09-12 13:00" "Sato Hanako" sato@example.com "stock.py を inventory.py に名前変更"
printf 'TAX_RATE = 10\n\ndef stock_count(items):\n """在庫が1以上の品目数を返す"""\n return len([i for i in items if i["qty"] > 0])\n' > inventory.py
git add . && c "2026-09-15 15:00" "Suzuki Taro" suzuki@example.com "stock_count に説明を追加"
git tag v1.0
git switch -q -c feature/report
echo "def report(): pass" > report.py
git add . && c "2026-09-16 10:00" "Suzuki Taro" suzuki@example.com "在庫レポートの雛形を追加"
echo "def report(): return 'ok'" > report.py
git add . && c "2026-09-17 10:00" "Suzuki Taro" suzuki@example.com "在庫レポートを実装"
git switch -q main
echo "在庫管理の小さなサンプルです" >> README.md
git add . && c "2026-09-18 10:00" "Sato Hanako" sato@example.com "README に説明を追加"
できあがった履歴は次の通りです。
$ git log --oneline --graph --all
* cfb0147 README に説明を追加
| * 1284232 在庫レポートを実装
| * 8fd2f6e 在庫レポートの雛形を追加
|/
* 994ee9a stock_count に説明を追加
* 5eb64b5 stock.py を inventory.py に名前変更
* 21ad499 Merge branch 'feature/search'
|\
| * 6475c65 検索語の前後の空白を除く #12
| * 3beffb2 検索機能を追加 #12
* | 597b00a 税率を10に変更し、在庫0を除外
|/
* ae66f3b 税率の定数を追加
* c09ac4d 在庫数を数える関数を追加
よく使うオプション一覧(実行結果つき)
| オプション | 意味 | 分類 |
|---|---|---|
--oneline |
短いハッシュと件名の1行表示 | 表示 |
--graph |
分岐・合流を線で描く | 表示 |
--all |
すべてのブランチ・タグを対象にする | 範囲 |
--decorate |
ブランチ名・タグ名を表示 | 表示 |
-p |
差分を表示 | 表示 |
--stat |
ファイルごとの変更行数 | 表示 |
--name-only |
変更ファイル名だけ | 表示 |
-n 数 |
表示件数 | 絞り込み |
--since / --until |
期間 | 絞り込み |
--author |
作者(正規表現) | 絞り込み |
--grep |
コミットメッセージ(正規表現) | 絞り込み |
-S 文字列 |
その文字列の出現数が変わったコミット | 差分の検索 |
-G 正規表現 |
合う行が追加・削除されたコミット | 差分の検索 |
--follow |
名前変更をまたいでファイルを追う | ファイル |
-L |
行範囲・関数の履歴 | ファイル |
--first-parent |
マージでは1つ目の親だけたどる | 範囲 |
--no-merges |
マージコミットを除く | 絞り込み |
--merges |
マージコミットだけ | 絞り込み |
表示を短くする:--oneline・-n・--decorate
$ git log -n 2
commit cfb0147f2116eb9e2c448dfe733fe82423324183
Author: Sato Hanako <sato@example.com>
Date: Fri Sep 18 10:00:00 2026 +0900
README に説明を追加
commit 994ee9a328961e3d0f5eba360991e46cf9070596
Author: Suzuki Taro <suzuki@example.com>
Date: Tue Sep 15 15:00:00 2026 +0900
stock_count に説明を追加
$ git log --oneline --decorate -n 3
cfb0147 (HEAD -> main) README に説明を追加
994ee9a (tag: v1.0) stock_count に説明を追加
5eb64b5 stock.py を inventory.py に名前変更
--decorate は、端末に表示するときは既定で有効です(設定 log.decorate の既定値が auto のため)。パイプやファイルに出すとブランチ名が消えるので、そのときは明示的に付けます。
変更内容を見る:--stat・-p・--name-only
$ git log --stat -n 1
commit cfb0147f2116eb9e2c448dfe733fe82423324183
Author: Sato Hanako <sato@example.com>
Date: Fri Sep 18 10:00:00 2026 +0900
README に説明を追加
README.md | 1 +
1 file changed, 1 insertion(+)
$ git log -p -n 1 -- README.md
commit cfb0147f2116eb9e2c448dfe733fe82423324183
(ヘッダーは省略)
diff --git a/README.md b/README.md
index 310f398..77bea43 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,2 @@
# shop
+在庫管理の小さなサンプルです
$ git log --oneline --name-status -n 2
cfb0147 README に説明を追加
M README.md
994ee9a stock_count に説明を追加
M inventory.py
-- ファイル名 を付けると、そのファイルを変えたコミットだけに絞れます。 --name-status は M(変更)・A(追加)・D(削除)・R(名前変更)の種別も出ます。
期間・作者・メッセージで絞る
$ git log --oneline --since="2026-09-10 00:00" --until="2026-09-15 23:59:59"
994ee9a stock_count に説明を追加
5eb64b5 stock.py を inventory.py に名前変更
21ad499 Merge branch 'feature/search'
$ git log --oneline --author=Suzuki
994ee9a stock_count に説明を追加
6475c65 検索語の前後の空白を除く #12
3beffb2 検索機能を追加 #12
ae66f3b 税率の定数を追加
$ git log --oneline --grep=#12
6475c65 検索語の前後の空白を除く #12
3beffb2 検索機能を追加 #12
日付だけで --until=2026-09-15 と書くと、時刻には「今の時刻」が使われます。 午前1時に実行したところ、9月15日15時のコミットは含まれませんでした。
$ git log --oneline --since=2026-09-10 --until=2026-09-15
5eb64b5 stock.py を inventory.py に名前変更
21ad499 Merge branch 'feature/search'
期間をきっちり区切りたいときは、"2026-09-15 23:59:59" のように時刻まで書くと結果が安定します。--author と --grep は正規表現で、-i を付けると大文字・小文字を区別しません。--grep を複数書くと「どれか」、--all-match を足すと「すべて」に合うコミットになります。
マージの扱い:--no-merges・--merges・--first-parent
$ git log --oneline --merges
21ad499 Merge branch 'feature/search'
$ git log --oneline --first-parent
cfb0147 README に説明を追加
994ee9a stock_count に説明を追加
5eb64b5 stock.py を inventory.py に名前変更
21ad499 Merge branch 'feature/search'
597b00a 税率を10に変更し、在庫0を除外
ae66f3b 税率の定数を追加
c09ac4d 在庫数を数える関数を追加
--first-parent は、マージで取り込まれた側(feature/search の2コミット)を飛ばし、main に直接積まれた流れだけを見せます。 「main にいつ何がマージされたか」を追うのに便利です。--no-merges はマージコミットだけを除き、取り込まれた側のコミットは表示します。
--pretty=format の指定子一覧
--format(--pretty=format: と同じ意味)で、表示する項目と並びを自由に決められます。 下の表の「出力例」は、サンプルリポジトリの v1.0(994ee9a)で実際に出した値です。
コミット・作者・日時
| 指定子 | 意味 | 出力例 |
|---|---|---|
%H / %h |
コミットハッシュ(完全/短縮) | 994ee9a32896… / 994ee9a |
%T / %t |
ツリーのハッシュ(完全/短縮) | 894a96f8e211… / 894a96f |
%P / %p |
親コミットのハッシュ(完全/短縮) | 5eb64b5d995a… / 5eb64b5 |
%an / %aN |
作者名(%aN は .mailmap を反映) |
Suzuki Taro |
%ae / %aE |
作者のメール(%aE は .mailmap を反映) |
suzuki@example.com |
%al / %aL |
メールの @ より前 | suzuki |
%ad |
作者日時(--date= に従う) |
Tue Sep 15 15:00:00 2026 +0900 |
%as |
作者日時(YYYY-MM-DD) | 2026-09-15 |
%ai / %aI |
ISO 8601 風/厳密な ISO 8601 | 2026-09-15 15:00:00 +0900 / 2026-09-15T15:00:00+09:00 |
%ar |
相対日時 | 2 weeks ago |
%at |
UNIX 時刻 | 1789452000 |
%aD |
RFC 2822 形式 | Tue, 15 Sep 2026 15:00:00 +0900 |
%ah |
人が読みやすい形式 | Tue Sep 15 15:00 |
%cn %ce %cd %cs など |
コミッター版(a を c に変える) | Suzuki Taro / 2026-09-15 |
作者(author)はコードを書いた人、コミッター(committer)はコミットを記録した人です。 rebase や cherry-pick をすると、コミッターの日時だけが新しくなります。
件名・参照・その他
| 指定子 | 意味 | 出力例 |
|---|---|---|
%s |
件名(1行目) | stock_count に説明を追加 |
%b / %B |
本文/件名と本文そのまま | (本文なし) |
%f |
ファイル名向けに整えた件名 | stock_count |
%d |
ブランチ・タグ名(括弧つき) | (tag: v1.0) |
%D |
ブランチ・タグ名(括弧なし) | tag: v1.0 |
%(decorate:オプション) |
括弧や区切りを指定して表示 | [tag: v1.0] |
%(describe:tags) |
git describe 風の名前 |
v1.0 |
%(trailers) |
Signed-off-by: などのトレーラー |
(なし) |
%S |
たどってきた参照名(--source と併用) |
v1.0 |
%m |
左右の印(< >、--left-right と併用) |
> |
%N |
git notes | (なし) |
%e |
エンコーディング | (なし) |
%G? / %GS / %GK など |
署名の状態・署名者・鍵 | N(署名なし) |
%gd / %gs など |
reflog の情報(-g と併用) |
— |
%f は英数字以外を除くため、日本語の件名はほぼ残りません。%(decorate:prefix=[,suffix=],separator= / ) のように、括弧や区切り文字を変えられます。
色・幅・改行
| 指定子 | 意味 |
|---|---|
%C(yellow) %C(cyan) %C(green) |
色を変える(%C(bold red) のように組み合わせ可) |
%C(auto) |
次の項目を Git の既定の色にする(%d に使うと便利) |
%C(reset)/%Creset |
色を戻す |
%<(11,trunc) |
次の項目を11桁に左寄せでそろえ、はみ出しは .. で切る |
%>(11) / %><(11) |
右寄せ/中央寄せ |
%w(72,0,4) |
72桁で折り返し、2行目以降を4字下げ |
%n |
改行 |
%% |
% そのもの |
%x09 |
16進数で文字を指定(09 はタブ) |
%+b / %-b |
空でなければ前に改行を入れる/空なら前の改行を消す |
表に載せた指定子は Git 公式ドキュメントの pretty-formats で確認しています。 %(count) と %(total) は git format-patch 用で、Git 2.43 の git log では展開されませんでした。
そのまま貼れる見やすいalias
~/.gitconfig の [alias] に書いておくと、git lg のような短い名前で呼び出せます。 次がそのまま貼れる完成形です。
[alias]
# 1行1コミットのグラフ(ハッシュ・日付・作者・ブランチ/タグ・件名)
lg = log --graph --format='%C(yellow)%h%C(reset) %C(cyan)%as%C(reset) %C(green)%<(11,trunc)%an%C(reset)%C(auto)%d%C(reset) %s'
# すべてのブランチ
lga = lg --all
# 変更ファイルつき
ll = log --format='%C(yellow)%h%C(reset) %s %C(green)(%an, %ar)%C(reset)' --stat
# 直前のコミットの詳細
last = log -1 --stat
# ファイルの履歴を名前変更をまたいで差分つきで
hist = log --follow -p --format='%C(yellow)%h%C(reset) %as %an%n%s%n' --
# 作者別のコミット数
who = shortlog -sn --no-merges HEAD
# 自分のコミットだけ
mine = !git log --oneline --author=\"$(git config user.name)\"
# 今日のコミット
today = log --oneline --since=midnight
# 今のブランチにだけあるコミット(main との比較)
ahead = log --oneline main..HEAD
# push していないコミット/まだ取り込んでいないコミット
outgoing = log --oneline @{upstream}..HEAD
incoming = log --oneline HEAD..@{upstream}
出力例
$ git lga
* cfb0147 2026-09-18 Sato Hanako (HEAD -> main) README に説明を追加
| * 1284232 2026-09-17 Suzuki Taro (feature/report) 在庫レポートを実装
| * 8fd2f6e 2026-09-16 Suzuki Taro 在庫レポートの雛形を追加
|/
* 994ee9a 2026-09-15 Suzuki Taro (tag: v1.0) stock_count に説明を追加
* 5eb64b5 2026-09-12 Sato Hanako stock.py を inventory.py に名前変更
* 21ad499 2026-09-10 Sato Hanako Merge branch 'feature/search'
|\
| * 6475c65 2026-09-06 Suzuki Taro (feature/search) 検索語の前後の空白を除く #12
| * 3beffb2 2026-09-05 Suzuki Taro 検索機能を追加 #12
* | 597b00a 2026-09-08 Sato Hanako 税率を10に変更し、在庫0を除外
|/
* ae66f3b 2026-09-03 Suzuki Taro 税率の定数を追加
* c09ac4d 2026-09-01 Sato Hanako 在庫数を数える関数を追加
$ git who
4 Sato Hanako
4 Suzuki Taro
$ git switch -q feature/report && git ahead
1284232 在庫レポートを実装
8fd2f6e 在庫レポートの雛形を追加
実際の端末では、ハッシュが黄、日付が水色、作者が緑、ブランチ名が Git 既定の色で表示されます。
| alias | ポイント |
|---|---|
lg |
%<(11,trunc) で作者名の幅をそろえると、件名の位置がそろって読みやすくなる |
lga |
alias の中で別の alias(lg)を呼べる |
who |
HEAD を付けておくと、パイプやスクリプトからでも標準入力を待たずに動く |
mine |
先頭の ! でシェルコマンドとして動かし、$(...) を使える |
outgoing / incoming |
追跡ブランチ(upstream)がないと fatal: no upstream configured for branch 'feature/report' と表示される。git push -u で設定してから使う |
alias や推奨設定をまとめた .gitconfig 全体の作り方は、git config の設定一覧の記事で扱っています。
「いつ誰がこの行を変えたか」を調べる手順
行の歴史をたどる道具は4つあり、知りたいことで使い分けます。
| 知りたいこと | 使うもの | 例 |
|---|---|---|
| 今の各行を最後に変えたのは誰か | git blame |
git blame -L 1,5 inventory.py |
| ある文字列が入った・消えたのはいつか | git log -S |
git log -S TAX_RATE |
| ある値が書き換わったのはいつか | git log -G |
git log -G 'TAX_RATE = [0-9]+' |
| 関数・行範囲の変化をすべて | git log -L |
git log -L :stock_count:inventory.py |
| ファイルの名前が変わる前も含めて | git log --follow |
git log --follow -- inventory.py |
手順1:blame で今の行の最終更新を見る
$ git blame inventory.py
597b00a2 stock.py (Sato Hanako 2026-09-08 16:00:00 +0900 1) TAX_RATE = 10
ae66f3ba stock.py (Suzuki Taro 2026-09-03 11:00:00 +0900 2)
^c09ac4d stock.py (Sato Hanako 2026-09-01 10:00:00 +0900 3) def stock_count(items):
994ee9a3 inventory.py (Suzuki Taro 2026-09-15 15:00:00 +0900 4) """在庫が1以上の品目数を返す"""
597b00a2 stock.py (Sato Hanako 2026-09-08 16:00:00 +0900 5) return len([i for i in items if i["qty"] > 0])
blame は名前変更を自動でたどり、元のファイル名(stock.py)も表示します。 先頭の ^ は、最初のコミットから変わっていない行の印です。ただし blame が分かるのは「最後に変えたコミット」だけなので、その前の経緯は次の手順で調べます。
手順2:-S と -G で「値が変わったコミット」を探す
$ git log --oneline -S TAX_RATE
ae66f3b 税率の定数を追加
$ git log --oneline -G 'TAX_RATE = [0-9]+'
597b00a 税率を10に変更し、在庫0を除外
ae66f3b 税率の定数を追加
-S は「その文字列の出現回数が変わった」コミットだけを出します。 税率を8から10に変えたコミット(597b00a)では TAX_RATE の数は1のままなので、-S では出ませんでした。値の書き換えまで拾いたいときは、合う行が追加・削除されたコミットを探す -G を使います。 「関数がいつ追加・削除されたか」は -S、「設定値がいつ変わったか」は -G が向いています。-p を足すと、その場で差分も確認できます。
手順3:-L で関数の変化を最初から追う
$ git log -L :stock_count:inventory.py --oneline
994ee9a stock_count に説明を追加
diff --git a/inventory.py b/inventory.py
--- a/inventory.py
+++ b/inventory.py
@@ -3,2 +3,3 @@
def stock_count(items):
+ """在庫が1以上の品目数を返す"""
return len([i for i in items if i["qty"] > 0])
597b00a 税率を10に変更し、在庫0を除外
diff --git a/stock.py b/stock.py
--- a/stock.py
+++ b/stock.py
@@ -3,2 +3,2 @@
def stock_count(items):
- return len(items)
+ return len([i for i in items if i["qty"] > 0])
c09ac4d 在庫数を数える関数を追加
diff --git a/stock.py b/stock.py
--- /dev/null
+++ b/stock.py
@@ -0,0 +1,2 @@
+def stock_count(items):
+ return len(items)
-L :関数名:ファイル で、その関数に関係する変更だけが差分つきで並びます。 名前変更前の stock.py までさかのぼっている点にも注目してください。行番号で指定するときは -L 1,1:inventory.py のように書き、-s を足すと差分を省いてコミットだけを出せます。
$ git log -L 1,1:inventory.py --oneline -s
597b00a 税率を10に変更し、在庫0を除外
ae66f3b 税率の定数を追加
手順4:--follow でファイルの全履歴を見る
$ git log --oneline -- inventory.py
994ee9a stock_count に説明を追加
5eb64b5 stock.py を inventory.py に名前変更
$ git log --oneline --follow -- inventory.py
994ee9a stock_count に説明を追加
5eb64b5 stock.py を inventory.py に名前変更
597b00a 税率を10に変更し、在庫0を除外
ae66f3b 税率の定数を追加
c09ac4d 在庫数を数える関数を追加
--follow なしでは名前変更より前の履歴が途切れます。 --follow は1つのファイルにだけ使えます。名前変更の判定は「内容が似ているか」で行うため、名前変更と大きな書き換えを同じコミットで行うと追えないことがあります。名前変更は単独のコミットにしておくと、あとから追いやすくなります。
範囲指定:A..B と A...B の違い
A..B は「B にあって A にない」コミット、A...B は「どちらか片方にだけある」コミットです。 サンプルでは main と feature/report が v1.0 から分かれています。
gitGraph
commit id: "994ee9a v1.0"
branch feature/report
commit id: "8fd2f6e"
commit id: "1284232"
checkout main
commit id: "cfb0147"
$ git log --oneline main..feature/report
1284232 在庫レポートを実装
8fd2f6e 在庫レポートの雛形を追加
$ git log --oneline feature/report..main
cfb0147 README に説明を追加
$ git log --oneline --left-right main...feature/report
< cfb0147 README に説明を追加
> 1284232 在庫レポートを実装
> 8fd2f6e 在庫レポートの雛形を追加
$ git rev-list --left-right --count main...feature/report
1 2
| 書き方 | 意味 | サンプルの結果 |
|---|---|---|
main..feature/report |
feature/report だけにある | 8fd2f6e, 1284232 |
feature/report..main |
main だけにある | cfb0147 |
main...feature/report |
片方にだけある(両方の合計) | 3件 |
^main feature/report |
main..feature/report と同じ |
8fd2f6e, 1284232 |
feature/report --not main |
同上 | 8fd2f6e, 1284232 |
v1.0..HEAD |
タグ以降のコミット | cfb0147 |
--left-right を付けると、< が左(main)、> が右(feature/report)のコミットです。 git rev-list --left-right --count は「main が1つ先、feature/report が2つ先」を数字で返すので、スクリプトでの判定に使えます。
git diff では意味が変わる
$ git diff --stat main..feature/report
README.md | 1 -
report.py | 1 +
2 files changed, 1 insertion(+), 1 deletion(-)
$ git diff --stat main...feature/report
report.py | 1 +
1 file changed, 1 insertion(+)
git diff では、.. は2つの先端どうしの比較、... は分岐点から B までの変更です。 .. では main 側の README の変更が「削除」として混ざり、... では feature/report で加えた変更だけになりました。プルリクエストで見える差分は ... の形に近いものです。
| git log | git diff | |
|---|---|---|
A..B |
B にあって A にないコミット | A と B の先端の差 |
A...B |
どちらか片方にだけあるコミット | 分岐点から B までの変更 |
よくある質問
Q. git log の画面から抜けられません。
A. 結果が長いとページャー(less)で表示されます。q で終了できます。ページャーを使わずに出したいときは git --no-pager log とします。
Q. 作者名の長さがばらばらで件名の位置がそろいません。
A. 作者名に %<(11,trunc) のような幅指定を付けると、11桁にそろえて長い名前は切り詰めるため、件名の開始位置がそろいます。この記事の lg alias がその例です。
Q. 削除したファイルの履歴を見るには?
A. git log --oneline -- 削除したパス で見られます。削除したコミットだけを知りたいときは git log --diff-filter=D --oneline -- パス を使います(D は削除の意味です)。
まとめ
- 全体の流れは
git log --oneline --graph --all、細かい情報は--statや-pを足す - 絞り込みは
-n・--since/--until(時刻まで書く)・--author・--grep・-- ファイル --formatの指定子と%C(...)・%<(N,trunc)で、読みやすい1行表示が作れる- alias(
lglgallhistwho)を.gitconfigに入れると毎回短く呼び出せる - 行の調査は blame →
-S(文字列の出入り)/-G(値の書き換え)→-L(関数の全変化)→--follow A..Bは B だけにあるコミット、A...Bは片方にだけあるコミット。git diff では意味が変わる
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「git logオプション一覧|見やすくするformat指定子とalias設定例」
株式会社RJCでは、git log で履歴を読み解く方法を仲間と学び合っています。こうした知識を共有しながら、日々技術を磨いています。
株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。
WE ARE HIRING
RJCで一緒に開発しながら、
成長を楽しみませんか?
RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!
- 127日年間休日
- 12時間平均残業時間
- 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!
ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。