English ▾ トピック ▾ 最新バージョン ▾ git-diff-tree は 2.49.0 で最終更新されました

名前

git-diff-tree - 2つのツリーオブジェクトを介して見つかったブロブの内容とモードを比較します

概要

git diff-tree [--stdin] [-m] [-s] [-v] [--no-commit-id] [--pretty]
	      [-t] [-r] [-c | --cc] [--combined-all-paths] [--root] [--merge-base]
	      [<common-diff-options>] <tree-ish> [<tree-ish>] [<path>…​]

説明

2つのツリーオブジェクトを介して見つかったブロブの内容とモードを比較します。

<tree-ish> が1つだけ指定された場合、そのコミットは親と比較されます (--stdin を参照)。

*git diff-tree* はコミットオブジェクトにカプセル化されたツリーを使用できることに注意してください。

オプション

-p
-u
--patch

パッチを生成します (-p を使ったパッチテキストの生成を参照)。

-s
--no-patch

diffメカニズムからの出力をすべて抑制します。デフォルトでパッチを表示する `git show` のようなコマンドでその出力を抑制したり、エイリアスでコマンドラインの早い段階にある `--patch` や `--stat` のようなオプションの効果をキャンセルしたりするのに便利です。

-U<n>
--unified=<n>

通常の3行ではなく、*<n>* 行のコンテキストを持つ差分を生成します。`--patch` を含意します。

--output=<file>

標準出力の代わりに指定されたファイルに出力します。

--output-indicator-new=<char>
--output-indicator-old=<char>
--output-indicator-context=<char>

生成されるパッチで、新規、旧、またはコンテキスト行を示すために使用される文字を指定します。通常、これらはそれぞれ `+`、`-`、` ` です。

--raw

差分をraw形式で生成します。これがデフォルトです。

--patch-with-raw

-p --raw の同義語です。

--indent-heuristic

diffのhunkの境界をずらしてパッチを読みやすくするヒューリスティックを有効にします。これがデフォルトです。

--no-indent-heuristic

インデントヒューリスティックを無効にします。

--minimal

可能な限り最小の差分が生成されるように、余分な時間をかけます。

--patience

「patience diff」アルゴリズムを使用して差分を生成します。

--histogram

「histogram diff」アルゴリズムを使用して差分を生成します。

--anchored=<text>

「アンカー付き差分」アルゴリズムを使用して差分を生成します。

このオプションは複数回指定できます。

ソースとデスティネーションの両方に存在し、一度だけ存在し、*<text>* で始まる行がある場合、このアルゴリズムはそれを削除または追加として出力に表示しないように試みます。内部的には「patience diff」アルゴリズムを使用します。

--diff-algorithm=(patience|minimal|histogram|myers)

差分アルゴリズムを選択します。バリアントは次のとおりです。

default
myers

基本的な貪欲差分アルゴリズムです。現在、これがデフォルトです。

minimal

可能な限り最小の差分が生成されるように、余分な時間をかけます。

patience

パッチを生成する際に「patience diff」アルゴリズムを使用します。

histogram

このアルゴリズムは、patience アルゴリズムを拡張し、「出現頻度の低い共通要素をサポート」します。

例えば、`diff.algorithm` 変数をデフォルト以外の値に設定していて、デフォルトのアルゴリズムを使用したい場合は、`--diff-algorithm=default` オプションを使用する必要があります。

--stat[=<width>[,<name-width>[,<count>]]]

diffstatを生成します。デフォルトでは、ファイル名部分に必要に応じて多くのスペースが使用され、残りはグラフ部分に充てられます。最大幅は端末の幅にデフォルト設定され、端末に接続されていない場合は80カラムとなり、*<width>* で上書きできます。ファイル名部分の幅は、コンマの後に別の幅 *<name-width>* を指定するか、`diff.statNameWidth=<name-width>` を設定することで制限できます。グラフ部分の幅は、`--stat-graph-width=<graph-width>` を使用するか、`diff.statGraphWidth=<graph-width>` を設定することで制限できます。`--stat` または `--stat-graph-width` を使用すると、統計グラフを生成するすべてのコマンドに影響しますが、`diff.statNameWidth` または `diff.statGraphWidth` を設定しても `git format-patch` には影響しません。3番目のパラメーター *<count>* を指定すると、出力が最初の *<count>* 行に制限され、それ以上ある場合は `...` が続きます。

これらのパラメーターは、`--stat-width=<width>`、`--stat-name-width=<name-width>`、`--stat-count=<count>` を使って個別に設定することもできます。

--compact-summary

ファイル作成または削除(「new」または「gone」、シンボリックリンクの場合はオプションで `+l`)、およびモード変更(実行可能ビットの追加または削除に対してそれぞれ `+x` または `-x`)など、拡張ヘッダー情報の要約をdiffstatで出力します。この情報はファイル名部分とグラフ部分の間に配置されます。`--stat` を含意します。

--numstat

--stat に似ていますが、追加および削除された行数を10進表記で表示し、パス名を省略せずに表示するため、機械処理に適しています。バイナリファイルの場合、`0 0` と表示する代わりに2つの `-` を出力します。

--shortstat

--stat フォーマットの最後の行のみを出力し、変更されたファイルの総数、および追加および削除された行数を表示します。

-X [<param>,...]
--dirstat[=<param>,...]

各サブディレクトリの変更量の相対的な分布を出力します。`--dirstat` の動作は、コンマ区切りのパラメータリストを渡すことでカスタマイズできます。デフォルトは `diff.dirstat` 設定変数によって制御されます (git-config[1] を参照)。以下のパラメータが利用可能です。

changes

ソースから削除された行、またはデスティネーションに追加された行を数えることで、dirstatの数値を計算します。これは、ファイル内の純粋なコード移動の量を無視します。言い換えれば、ファイル内の行の並べ替えは、他の変更ほどカウントされません。これは、パラメータが指定されていない場合のデフォルトの動作です。

lines

通常の行ベースの差分分析を行い、削除/追加された行数を合計することでdirstatの数値を計算します。(バイナリファイルの場合、バイナリファイルには行の自然な概念がないため、代わりに64バイトのチャンクを数えます)。これは `changes` の動作よりも高価な `--dirstat` の動作ですが、ファイル内の並べ替えられた行も他の変更と同じくらいカウントします。結果の出力は、他の `--*stat` オプションから得られるものと一貫しています。

files

変更されたファイルの数を数えることでdirstatの数値を計算します。dirstat分析では、変更された各ファイルが等しくカウントされます。これは、ファイルの内容をまったく見る必要がないため、計算上最も安価な `--dirstat` 動作です。

cumulative

子ディレクトリの変更も親ディレクトリに対してカウントします。`cumulative` を使用する場合、報告されるパーセンテージの合計が100%を超える場合があることに注意してください。デフォルト(非累積)の動作は `noncumulative` パラメータで指定できます。

<limit>

整数パラメータは、カットオフパーセンテージ(デフォルトでは3%)を指定します。このパーセンテージ未満の変更に貢献するディレクトリは出力に表示されません。

例: 以下は、変更されたファイルをカウントし、変更されたファイルの総量の10%未満のディレクトリを無視し、子ディレクトリのカウントを親ディレクトリに累積します: `--dirstat=files,10,cumulative`。

--cumulative

--dirstat=cumulative の同義語です。

--dirstat-by-file[=<param>,...]

--dirstat=files,<param>,... の同義語です。

--summary

作成、名前変更、モード変更などの拡張ヘッダー情報の要約を出力します。

--patch-with-stat

-p --stat の同義語です。

-z

--raw、`--numstat`、`--name-only`、または `--name-status` が指定されている場合、パス名をそのままにし、NUL文字を出力フィールドターミネータとして使用します。

このオプションがない場合、「通常でない」文字を含むパス名は、設定変数 `core.quotePath` で説明されているように引用符で囲まれます (git-config[1] を参照)。

--name-only

post-imageツリーで変更された各ファイルの名前のみを表示します。ファイル名はしばしばUTF-8でエンコードされます。詳細については、git-log[1] マニュアルページのエンコーディングに関する説明を参照してください。

--name-status

変更された各ファイルの名前とステータスのみを表示します。ステータス文字の意味については、`--diff-filter` オプションの説明を参照してください。--name-only と同様に、ファイル名はしばしばUTF-8でエンコードされます。

--submodule[=<format>]

サブモジュールの差分がどのように表示されるかを指定します。`--submodule=short` を指定すると、`short` フォーマットが使用されます。このフォーマットは、範囲の開始と終了にあるコミットの名前のみを表示します。`--submodule` または `--submodule=log` が指定されると、`log` フォーマットが使用されます。このフォーマットは、git-submodule[1] の `summary` と同様に、範囲内のコミットをリストします。`--submodule=diff` が指定されると、`diff` フォーマットが使用されます。このフォーマットは、コミット範囲間のサブモジュール内容の変更をインライン差分で表示します。デフォルトは `diff.submodule`、または設定オプションが未設定の場合は `short` フォーマットです。

--color[=<when>]

色付きの差分を表示します。`--color`(つまり、`=<when>` なし)は `--color=always` と同じです。*<when>* は `always`、`never`、または `auto` のいずれかです。

--no-color

色付き差分をオフにします。これは `--color=never` と同じです。

--color-moved[=<mode>]

移動されたコード行は異なる色で表示されます。オプションが指定されていない場合、*<mode>* はデフォルトで `no` になり、モードなしでオプションが指定された場合は `zebra` になります。モードは次のいずれかである必要があります。

no

移動された行は強調表示されません。

default

zebra の同義語です。これは将来、より合理的なモードに変更される可能性があります。

plain

ある場所に追加され、別の場所から削除された行は、`color.diff.newMoved` で着色されます。同様に、差分の別の場所に追加された削除行には `color.diff.oldMoved` が使用されます。このモードは移動された行をすべて検出しますが、コードブロックが順列なしで移動されたかどうかをレビューで判断するにはあまり役に立ちません。

blocks

少なくとも20文字の英数字からなる移動されたテキストのブロックが貪欲に検出されます。検出されたブロックは `color.diff.(old|new)Moved` の色を使用して着色されます。隣接するブロックは区別できません。

zebra

移動されたテキストのブロックは `blocks` モードと同様に検出されます。ブロックは `color.diff.(old|new)Moved` 色または `color.diff.(old|new)MovedAlternative` 色のいずれかを使用して着色されます。2つの色の変化は、新しいブロックが検出されたことを示します。

dimmed-zebra

zebra に似ていますが、移動されたコードの興味のない部分の追加の減光が行われます。隣接する2つのブロックの境界線は興味深いと見なされ、残りは興味のないものです。`dimmed_zebra` は非推奨の同義語です。

--no-color-moved

移動検出をオフにします。これは設定を上書きするために使用できます。--color-moved=no と同じです。

--color-moved-ws=<mode>,...

これは、`--color-moved` の移動検出を実行する際に空白文字をどのように無視するかを設定します。これらのモードはコンマ区切りのリストとして指定できます。

no

移動検出を実行する際に空白文字を無視しません。

ignore-space-at-eol

行末の空白文字の変更を無視します。

ignore-space-change

空白文字の量の変更を無視します。これは行末の空白文字を無視し、1つ以上の空白文字の他のすべてのシーケンスを同等と見なします。

ignore-all-space

行を比較する際に空白文字を無視します。これは、一方の行に空白文字があり、もう一方の行に空白文字がない場合でも差分を無視します。

allow-indentation-change

最初に移動検出における任意の空白文字を無視し、その後、行ごとの空白文字の変更が同じである場合にのみ、移動されたコードブロックを1つのブロックにグループ化します。これは他のモードと互換性がありません。

--no-color-moved-ws

移動検出を実行する際に空白文字を無視しません。これは設定を上書きするために使用できます。--color-moved-ws=no と同じです。

--word-diff[=<mode>]

デフォルトでは、単語は空白文字で区切られます。`--word-diff-regex` を以下で参照してください。*<mode>* はデフォルトで `plain` であり、次のいずれかである必要があります。

color

変更された単語を色のみを使用して強調表示します。`--color` を含意します。

plain

単語を `[-removed-]` と `{added}` の形式で表示します。区切り文字が入力に現れてもエスケープしようとしないため、出力が曖昧になる可能性があります。

porcelain

スクリプト消費を目的とした特別な行ベースの形式を使用します。追加/削除/変更なしの実行は、通常の統合差分形式で、行の先頭に `+` / `-` / ` ` 文字で始まり、行末まで続く形式で出力されます。入力内の改行は、それ自身の行にチルダ `~` で表されます。

none

再度ワード差分を無効にします。

最初のモードの名前にもかかわらず、有効になっている場合、すべてのモードで色を使用して変更された部分が強調表示されることに注意してください。

--word-diff-regex=<regex>

非空白文字の連続を単語と見なす代わりに、*<regex>* を使用して単語が何であるかを決定します。すでに有効になっていない限り、`--word-diff` も含意します。

*<regex>* の重複しないすべてのマッチが単語と見なされます。これらのマッチ間のものはすべて空白文字と見なされ、差分を見つける目的では無視されます(!)。すべての非空白文字にマッチすることを確認するために、正規表現に `|[^[:space:]]` を追加したい場合があります。改行を含むマッチは、改行で黙って切り捨てられます(!)。

例えば、`--word-diff-regex=.` は各文字を単語として扱い、それに合わせて文字単位で差分を表示します。

正規表現は、diffドライバまたは設定オプションを介して設定することもできます。gitattributes[5] または git-config[1] を参照してください。明示的に指定すると、diffドライバまたは設定をすべて上書きします。Diffドライバは設定を上書きします。

--color-words[=<regex>]

--word-diff=color に加え(正規表現が指定された場合)、`--word-diff-regex=<regex>` と同等です。

--no-renames

設定ファイルでデフォルトで有効になっている場合でも、名前変更検出をオフにします。

--[no-]rename-empty

空のブロブを名前変更元として使用するかどうか。

--check

変更によって競合マーカーや空白文字エラーが導入された場合に警告します。空白文字エラーと見なされるものは `core.whitespace` 設定によって制御されます。デフォルトでは、行末の空白文字(空白文字のみで構成される行を含む)と、行の初期インデント内でタブ文字が直後に続く空白文字は、空白文字エラーと見なされます。問題が見つかった場合、ゼロ以外のステータスで終了します。`--exit-code` とは互換性がありません。

--ws-error-highlight=<kind>

差分の `context`、`old`、または `new` 行の空白文字エラーを強調表示します。複数の値はコンマで区切られ、`none` は以前の値をリセットし、`default` はリストを `new` にリセットし、`all` は `old,new,context` の省略形です。このオプションが指定されておらず、設定変数 `diff.wsErrorHighlight` が設定されていない場合、`new` 行の空白文字エラーのみが強調表示されます。空白文字エラーは `color.diff.whitespace` で着色されます。

--full-index

パッチ形式の出力を生成する際に、「index」行に最初の数文字ではなく、完全なpre-imageおよびpost-imageのブロブオブジェクト名を表示します。

--binary

--full-index に加えて、`git-apply` で適用できるバイナリ差分を出力します。`--patch` を含意します。

--abbrev[=<n>]

diff-raw形式の出力およびdiff-treeヘッダー行で完全な40バイトの16進オブジェクト名を表示する代わりに、オブジェクトを一意に参照する最短のプレフィックス(少なくとも *<n>* 桁の16進数)を表示します。diff-patch出力形式では、`--full-index` がより高い優先順位を持ちます。つまり、`--full-index` が指定されている場合、`--abbrev` にかかわらず完全なブロブ名が表示されます。デフォルト以外の桁数は `--abbrev=<n>` で指定できます。

-B[<n>][/<m>]
--break-rewrites[=[<n>][/<m>]]

完全な書き換え変更を削除と作成のペアに分割します。これには2つの目的があります。

これは、ファイルの完全な書き換えに相当する変更が、テキスト的に一致するごく少数の行と混ざった一連の削除と挿入としてではなく、すべて古いものを単一で削除し、その後にすべて新しいものを単一で挿入するものとして扱われる方法に影響します。数値 *<m>* は `-B` オプションのこの側面を制御します(デフォルトは60%)。`-B/70%` は、Gitがそれを完全な書き換えと見なすには、元の30%未満が結果に残っている必要があることを指定します(つまり、そうでない場合、結果のパッチはコンテキスト行と混ざった一連の削除と挿入になります)。

-M と一緒に使用すると、完全に書き換えられたファイルも名前変更の元として考慮され(通常、`-M` は消滅したファイルのみを名前変更の元と見なします)、数値 *<n>* は `-B` オプションのこの側面を制御します(デフォルトは50%)。`-B20%` は、ファイルのサイズの20%以上と比較して追加と削除を伴う変更が、別のファイルへの名前変更の可能性のある元として検出される資格があることを指定します。

-M[<n>]
--find-renames[=<n>]

名前変更を検出します。*<n>* が指定された場合、それは類似度インデックス(つまり、ファイルのサイズと比較した追加/削除の量)の閾値です。例えば、`-M90%` は、ファイルの90%以上が変更されていない場合、Gitが削除/追加のペアを名前変更と見なすべきであることを意味します。`%` 記号がない場合、数値は小数点が付いた分数として読み取られます。つまり、`-M5` は0.5になり、`-M50%` と同じです。同様に、`-M05` は `-M5%` と同じです。正確な名前変更に検出を限定するには、`-M100%` を使用します。デフォルトの類似度インデックスは50%です。

-C[<n>]
--find-copies[=<n>]

名前変更だけでなく、コピーも検出します。`--find-copies-harder` も参照してください。*<n>* が指定された場合、`-M<n>` と同じ意味を持ちます。

--find-copies-harder

パフォーマンス上の理由から、デフォルトでは `-C` オプションは、コピー元のファイルが同じチェンジセットで変更された場合にのみコピーを検出します。このフラグは、コピー元ファイルの候補として未変更のファイルを検査させます。これは大規模なプロジェクトでは非常に高価な操作なので、注意して使用してください。複数の `-C` オプションを指定しても同じ効果があります。

-D
--irreversible-delete

削除に対するpreimageを省略します。つまり、ヘッダーのみを出力し、preimageと `/dev/null` の間の差分は出力しません。生成されるパッチは `patch` や `git apply` で適用されることを意図していません。これは、変更後のテキストのレビューのみに集中したい人向けです。さらに、このオプション名が示すように、出力にはこのようなパッチを逆方向に適用するための十分な情報が明らかに不足しています。

-B と一緒に使用すると、削除/作成ペアの削除部分のpreimageも省略されます。

-l<num>

-M および `-C` オプションには、名前変更/コピーのサブセットを安価に検出できる予備段階と、残りの未ペアのデスティネーションすべてと関連するソースすべてを比較する網羅的なフォールバック部分が含まれます。(名前変更の場合、残りの未ペアのソースのみが関連し、コピーの場合、すべての元のソースが関連します。) N個のソースとデスティネーションの場合、この網羅的なチェックはO(N^2)です。このオプションは、関係するソース/デスティネーションファイルの数が指定された数を超えた場合、名前変更/コピー検出の網羅的な部分が実行されるのを防ぎます。デフォルトは `diff.renameLimit` です。値0は無制限として扱われることに注意してください。

--diff-filter=[(A|C|D|M|R|T|U|X|B)...[*]]

追加されたファイル (`A`)、コピーされたファイル (`C`)、削除されたファイル (`D`)、変更されたファイル (`M`)、名前変更されたファイル (`R`)、タイプが変更されたファイル(例:通常ファイル、シンボリックリンク、サブモジュールなど) (`T`)、マージされていないファイル (`U`)、不明なファイル (`X`)、またはペアリングが壊れたファイル (`B`) のみを対象とします。フィルター文字の任意の組み合わせ(なしを含む)を使用できます。組み合わせに `*` (All-or-none) を追加すると、比較で他の基準に一致するファイルがある場合、すべてのパスが選択されます。他の基準に一致するファイルがない場合、何も選択されません。

また、これらの大文字は小文字にすることで除外できます。例えば、`--diff-filter=ad` は追加されたパスと削除されたパスを除外します。

すべての差分がすべてのタイプを特徴とするわけではないことに注意してください。例えば、それらのタイプの検出が無効になっている場合、コピーおよび名前変更されたエントリは表示されません。

-S<string>

ファイル内で指定された *<string>* の出現回数を変更する差分(つまり、追加/削除)を探します。スクリプト作成者向けです。

正確なコードブロック(構造体など)を探していて、そのブロックが最初に作成されてからの履歴を知りたい場合に便利です。この機能を繰り返し使用して、preimage内の関心のあるブロックを `-S` にフィードバックし、ブロックの最初のバージョンが得られるまで続行します。

バイナリファイルも検索されます。

-G<regex>

パッチテキストに *<regex>* に一致する追加/削除行が含まれる差分を探します。

-S<regex> `--pickaxe-regex` と `-G<regex>` の違いを説明するために、同じファイルで以下の差分を含むコミットを考えてみましょう。

+    return frotz(nitfol, two->ptr, 1, 0);
...
-    hit = frotz(nitfol, mf2.ptr, 1, 0);

git log -G"frotz\(nitfol" はこのコミットを表示しますが、`git log -S"frotz\(nitfol" --pickaxe-regex` は表示しません(その文字列の出現回数が変更されなかったため)。

--text が指定されない限り、textconvフィルターのないバイナリファイルのパッチは無視されます。

詳細については、gitdiffcore[7] の *pickaxe* の項目を参照してください。

--find-object=<object-id>

指定されたオブジェクトの出現回数を変更する差分を探します。`-S` に似ていますが、特定の文字列ではなく特定のオブジェクトIDを検索するという点で引数が異なります。

オブジェクトはブロブまたはサブモジュールコミットである可能性があります。git-log でツリーも検索するために `-t` オプションを含意します。

--pickaxe-all

-S または `-G` が変更を見つけた場合、*<string>* 内の変更を含むファイルだけでなく、その変更セット内のすべての変更を表示します。

--pickaxe-regex

-S に与えられた *<string>* を、マッチさせるための拡張POSIX正規表現として扱います。

-O<orderfile>

ファイルが出力に表示される順序を制御します。これは `diff.orderFile` 設定変数 (git-config[1] を参照) を上書きします。`diff.orderFile` をキャンセルするには、`--O/dev/null` を使用します。

出力順序は、*<orderfile>* 内のglobパターンの順序によって決定されます。最初のパターンに一致するパス名を持つすべてのファイルが最初に出力され、次に2番目のパターン(ただし最初のパターンではない)に一致するパス名を持つすべてのファイルが出力され、以下同様です。どのパターンにも一致しないパス名を持つすべてのファイルは、ファイルの最後に暗黙的なすべて一致パターンがあるかのように最後に出力されます。複数のパス名が同じランクを持つ場合(同じパターンに一致するが、それより前のパターンには一致しない)、相互の出力順序は通常の順序です。

*<orderfile>* は次のように解析されます。

  • 空白行は無視されるため、可読性のための区切り文字として使用できます。

  • ハッシュ(「`#`」)で始まる行は無視されるため、コメントとして使用できます。パターンがハッシュで始まる場合は、パターンの先頭にバックスラッシュ(「`\`」)を追加します。

  • 他の各行には単一のパターンが含まれます。

パターンは `fnmatch`(3) で `FNM_PATHNAME` フラグなしで使用されるパターンと同じ構文とセマンティクスを持ちますが、パス名の最後のコンポーネントを任意の数だけ削除した場合にパターンに一致する場合も、パス名がパターンに一致します。例えば、パターン「`foo*bar`」は「`fooasdfbar`」と「`foo/bar/baz/asdf`」には一致しますが、「`foobarx`」には一致しません。

--skip-to=<file>
--rotate-to=<file>

指定された *<file>* より前のファイルを出力から破棄するか(つまり、*skip to*)、出力の最後に移動させます(つまり、*rotate to*)。これらのオプションは主に `git difftool` コマンドの使用のために考案されたものであり、それ以外ではあまり有用ではないかもしれません。

-R

2つの入力を入れ替えます。つまり、インデックスまたはディスク上のファイルからツリーの内容への差分を表示します。

--relative[=<path>]
--no-relative

プロジェクトのサブディレクトリから実行した場合、このオプションを使用すると、ディレクトリ外の変更を除外し、それに対する相対パス名を表示するように指示できます。サブディレクトリにいない場合(例えば、bareリポジトリの場合)、*<path>* を引数として指定することで、出力の基準となるサブディレクトリを指定できます。`--no-relative` は `diff.relative` 設定オプションと以前の `--relative` の両方を取り消すために使用できます。

-a
--text

すべてのファイルをテキストとして扱います。

--ignore-cr-at-eol

比較を行う際に行末のキャリッジリターンを無視します。

--ignore-space-at-eol

行末の空白文字の変更を無視します。

-b
--ignore-space-change

空白文字の量の変更を無視します。これは行末の空白文字を無視し、1つ以上の空白文字の他のすべてのシーケンスを同等と見なします。

-w
--ignore-all-space

行を比較する際に空白文字を無視します。これは、一方の行に空白文字があり、もう一方の行に空白文字がない場合でも差分を無視します。

--ignore-blank-lines

すべての行が空白である変更を無視します。

-I<regex>
--ignore-matching-lines=<regex>

すべての行が *<regex>* に一致する変更を無視します。このオプションは複数回指定できます。

--inter-hunk-context=<number>

差分hunk間のコンテキストを指定された *<number>* 行まで表示し、互いに近いhunkを結合します。デフォルトは `diff.interHunkContext`、または設定オプションが未設定の場合は0です。

-W
--function-context

各変更について、関数全体をコンテキスト行として表示します。関数名は、`git diff` がパッチhunkヘッダーを生成するのと同じ方法で決定されます(gitattributes[5] の「カスタムhunkヘッダーの定義」を参照)。

--exit-code

プログラムを `diff`(1) と同様の終了コードで終了させます。つまり、差分があった場合は1で終了し、差分がなかった場合は0で終了します。

--quiet

プログラムのすべての出力を無効にします。`--exit-code` を含意します。終了コードが信頼されていない外部diffヘルパーの実行を無効にします。つまり、それぞれの設定オプション `diff.trustExitCode` または `diff.`*<driver>*`.trustExitCode` または環境変数 `GIT_EXTERNAL_DIFF_TRUST_EXIT_CODE` が偽の場合です。

--ext-diff

外部diffヘルパーの実行を許可します。gitattributes[5] で外部diffドライバを設定した場合、git-log[1] および関連コマンドでこのオプションを使用する必要があります。

--no-ext-diff

外部diffドライバを禁止します。

--textconv
--no-textconv

バイナリファイルを比較する際に、外部テキスト変換フィルターの実行を許可(または禁止)します。詳細は gitattributes[5] を参照してください。textconvフィルターは通常一方向の変換であるため、結果の差分は人間が読みやすいものですが、適用することはできません。このため、textconvフィルターはデフォルトでは git-diff[1] および git-log[1] でのみ有効になっており、git-format-patch[1] やdiffプラミングコマンドでは有効になっていません。

--ignore-submodules[=(none|untracked|dirty|all)]

差分生成時にサブモジュールへの変更を無視します。`all` がデフォルトです。`none` を使用すると、サブモジュールが未追跡ファイルまたは変更されたファイルを含む場合、あるいはその `HEAD` がスーパープロジェクトに記録されたコミットと異なる場合に、サブモジュールが変更されたと見なされ、git-config[1] または gitmodules[5] の `ignore` オプションの任意の設定を上書きするために使用できます。`untracked` を使用すると、サブモジュールが未追跡コンテンツのみを含む場合、変更されたとは見なされません(ただし、変更されたコンテンツについては引き続きスキャンされます)。`dirty` を使用すると、サブモジュールの作業ツリーへのすべての変更が無視され、スーパープロジェクトに保存されているコミットへの変更のみが表示されます(これは1.7.0までの動作でした)。`all` を使用すると、サブモジュールへのすべての変更が非表示になります。

--src-prefix=<prefix>

「a/」の代わりに、指定されたソース *<prefix>* を表示します。

--dst-prefix=<prefix>

「b/」の代わりに、指定されたデスティネーション *<prefix>* を表示します。

--no-prefix

ソースまたはデスティネーションのプレフィックスを表示しません。

--default-prefix

デフォルトのソースおよびデスティネーションプレフィックス(「a/」および「b/」)を使用します。これは `diff.noprefix`、`diff.srcPrefix`、`diff.dstPrefix`、`diff.mnemonicPrefix` などの設定変数 (git-config[1] を参照) を上書きします。

--line-prefix=<prefix>

出力の各行に、追加の *<prefix>* を前置します。

--ita-invisible-in-index

デフォルトでは、`git add -N` で追加されたエントリは `git diff` では既存の空ファイルとして表示され、`git diff --cached` では新しいファイルとして表示されます。このオプションを使用すると、エントリは `git diff` では新しいファイルとして表示され、`git diff --cached` では存在しないものとして表示されます。このオプションは `--ita-visible-in-index` で元に戻すことができます。どちらのオプションも実験的なものであり、将来削除される可能性があります。

これらの共通オプションに関する詳細な説明については、gitdiffcore[7] も参照してください。

<tree-ish>

ツリーオブジェクトのID。

<path>…​

指定された場合、結果は提供されたpathspecのいずれかに一致するファイルのサブセットに限定されます。

-r

サブツリーに再帰的に入ります。

-t

ツリーエントリ自体とサブツリーも表示します。-r を含意します。

--root

--root が指定されている場合、最初のコミットは大きな作成イベントとして表示されます。これはNULLツリーに対する差分と同等です。

--merge-base

<tree-ish>s を直接比較する代わりに、2つの <tree-ish>s 間のマージベースを「以前」の側として使用します。2つの <tree-ish>s が指定されている必要があり、それらは両方ともコミットである必要があります。

--stdin

--stdin が指定されている場合、このコマンドはコマンドラインから <tree-ish> 引数をとりません。代わりに、標準入力から2つの <tree>、1つの <commit>、または <commit> のリストを含む行を読み取ります。(区切り文字として1つのスペースを使用してください。)

2つのツリーが与えられた場合、最初のツリーを2番目のツリーと比較します。単一のコミットが与えられた場合、そのコミットを親と比較します。残りのコミットが与えられた場合、それらは最初のコミットの親であるかのように使用されます。

2つのツリーを比較する場合、両方のツリーのID(スペースで区切られ、改行で終了)が差分の前に出力されます。コミットを比較する場合、最初の(または唯一の)コミットのIDに続いて改行が出力されます。

以下のフラグは、コミットを比較する際の動作(ただしツリーは含まない)にさらに影響を与えます。

-m

デフォルトでは、*git diff-tree --stdin* はマージコミットの差分を表示しません。このフラグを使用すると、すべての親からのそのコミットに対する差分が表示されます。`-c` も参照してください。

-s

デフォルトでは、*git diff-tree --stdin* は差分を、機械可読形式(`-p` なし)またはパッチ形式(`-p` あり)で表示します。この出力は抑制できます。これは `-v` フラグと一緒に使用した場合にのみ有用です。

-v

このフラグを使用すると、*git diff-tree --stdin* は差分の前にコミットメッセージも表示するようになります。

--pretty[=<format>]
--format=<format>

コミットログの内容を指定された形式で整形して出力します。ここで、*<format>* は *oneline*、*short*、*medium*、*full*、*fuller*、*reference*、*email*、*raw*、*format:<string>*、*tformat:<string>* のいずれかです。*<format>* が上記以外の値で、*%placeholder* を含む場合、*--pretty=tformat:<format>* が与えられたかのように動作します。

各形式の詳細については、「PRETTY FORMATS」セクションを参照してください。*=<format>* 部分が省略された場合、デフォルトは *medium* です。

注意: デフォルトのprettyフォーマットはリポジトリ設定で指定できます(git-config[1] を参照)。

--abbrev-commit

完全な40バイトの16進コミットオブジェクト名を表示する代わりに、オブジェクトを一意に識別するプレフィックスを表示します。「--abbrev=<n>」オプション(表示される場合、差分出力も変更します)を使用して、プレフィックスの最小長を指定できます。

これにより、「--pretty=oneline」は80カラム端末を使用する人にとって格段に読みやすくなるはずです。

--no-abbrev-commit

完全な40バイトの16進コミットオブジェクト名を表示します。これは明示的または「--oneline」などの他のオプションによって暗黙的に指定された `--abbrev-commit` を無効にします。また、`log.abbrevCommit` 変数も上書きします。

--oneline

これは、「--pretty=oneline --abbrev-commit」を組み合わせた省略形です。

--encoding=<encoding>

コミットオブジェクトはログメッセージに使用された文字エンコーディングをそのエンコーディングヘッダーに記録します。このオプションは、ユーザーが好むエンコーディングでコミットログメッセージを再エンコードするようにコマンドに指示するために使用できます。非プラミングコマンドの場合、これはUTF-8にデフォルト設定されます。オブジェクトが `X` でエンコードされていると主張し、我々が `X` で出力する場合、オブジェクトはそのまま出力されることに注意してください。これは、元のコミット内の無効なシーケンスが出力にコピーされる可能性があることを意味します。同様に、iconv(3) がコミットの変換に失敗した場合、元のオブジェクトはそのまま静かに出力されます。

--expand-tabs=<n>
--expand-tabs
--no-expand-tabs

ログメッセージを出力に表示する前に、タブ展開(各タブを *<n>* の倍数である次の表示カラムを埋めるのに十分なスペースに置き換える)を実行します。`--expand-tabs` は `--expand-tabs=8` の省略形であり、`--no-expand-tabs` はタブ展開を無効にする `--expand-tabs=0` の省略形です。

デフォルトでは、タブはログメッセージを4スペースインデントするprettyフォーマット(つまり、デフォルトである *medium*、*full*、および *fuller*)で展開されます。

--notes[=<ref>]

コミットログメッセージを表示する際に、コミットに注釈を付けたノート(git-notes[1] を参照)を表示します。これは、コマンドラインで `--pretty`、`--format`、または `--oneline` オプションが指定されていない場合の `git log`、`git show`、および `git whatchanged` コマンドのデフォルトです。

デフォルトでは、表示されるノートは `core.notesRef` および `notes.displayRef` 変数(または対応する環境変数による上書き)にリストされているノートrefからのものです。詳細については、git-config[1] を参照してください。

オプションの *<ref>* 引数を使用すると、表示するノートを見つけるためにそのrefが使用されます。refが `refs/notes/` で始まる場合、完全なrefnameを指定できます。`notes/` で始まる場合、`refs/` が前置され、それ以外の場合は `refs/notes/` が前置されてrefの完全な名前が形成されます。

複数の --notes オプションを組み合わせて、表示されるノートを制御できます。例: 「--notes=foo」は「refs/notes/foo」からのノートのみを表示します。「--notes=foo --notes」は「refs/notes/foo」とデフォルトのノートref(s)の両方からのノートを表示します。

--no-notes

ノートを表示しません。これは、ノートが表示されるノートrefのリストをリセットすることで、上記の `--notes` オプションを無効にします。オプションはコマンドラインで与えられた順序で解析されるため、例えば「--notes --notes=foo --no-notes --notes=bar」は「refs/notes/bar」からのノートのみを表示します。

--show-notes-by-default

特定のノートを表示するためのオプションが指定されていない限り、デフォルトのノートを表示します。

--show-notes[=<ref>]
--[no-]standard-notes

これらのオプションは非推奨です。代わりに上記の --notes/--no-notes オプションを使用してください。

--show-signature

署名されたコミットオブジェクトの有効性を、署名を `gpg --verify` に渡して確認し、その出力を表示します。

--no-commit-id

*git diff-tree* は該当する場合にコミットIDを含む行を出力します。このフラグはコミットIDの出力を抑制します。

-c

このフラグは、マージコミットの表示方法を変更します(これは、コマンドが1つの <tree-ish> または `--stdin` を与えられた場合にのみ有用であることを意味します)。親と結果のペアごとの差分を一度に1つずつ表示する(これは `-m` オプションが行うこと)のではなく、各親からマージ結果への差分を同時に表示します。さらに、すべての親から変更されたファイルのみをリストします。

--cc

このフラグは、`-c` オプションと同様の方法でマージコミットパッチの表示方法を変更します。これは `-c` および `-p` オプションを含意し、親の内容が2つのバリアントしかなく、マージ結果が変更なしでそのうちの1つを選択するような、興味のないhunkを省略することでパッチ出力をさらに圧縮します。すべてのhunkが興味のないものである場合、コミット自体とコミットログメッセージは、他の「空の差分」の場合と同様に表示されません。

--combined-all-paths

このフラグは、結合された差分(マージコミットに使用)がすべての親からのファイル名をリストするようにします。したがって、これは `-c` または `--cc` が指定されている場合にのみ効果があり、ファイル名の変更が検出された場合(つまり、名前変更またはコピー検出のいずれかが要求された場合)にのみ有用である可能性が高いです。

--always

差分自体が空であっても、コミット自体とコミットログメッセージを表示します。

PRETTY FORMATS

コミットがマージであり、pretty-formatが *oneline*、*email*、または *raw* でない場合、*Author:* 行の前に追加の行が挿入されます。この行は「Merge: 」で始まり、祖先コミットのハッシュがスペースで区切られて表示されます。リストされたコミットは、履歴の表示を制限している場合、必ずしも直接の親コミットのリストであるとは限りません(例えば、特定のディレクトリやファイルに関連する変更のみに関心がある場合など)。

いくつかの組み込みフォーマットがあり、pretty.<name> 設定オプションを別のフォーマット名、または以下で説明する *format:* 文字列に設定することで、追加のフォーマットを定義できます(git-config[1] を参照)。組み込みフォーマットの詳細は次のとおりです。

  • oneline

    <hash> <title-line>

    これは可能な限りコンパクトに設計されています。

  • short

    commit <hash>
    Author: <author>
    <title-line>
  • medium

    commit <hash>
    Author: <author>
    Date:   <author-date>
    <title-line>
    <full-commit-message>
  • full

    commit <hash>
    Author: <author>
    Commit: <committer>
    <title-line>
    <full-commit-message>
  • fuller

    commit <hash>
    Author:     <author>
    AuthorDate: <author-date>
    Commit:     <committer>
    CommitDate: <committer-date>
    <title-line>
    <full-commit-message>
  • reference

    <abbrev-hash> (<title-line>, <short-author-date>)

    このフォーマットは、コミットメッセージで別のコミットを参照するために使用され、`--pretty='format:%C(auto)%h (%s, %ad)'` と同じです。デフォルトでは、別の `--date` オプションが明示的に指定されていない限り、日付は `--date=short` でフォーマットされます。フォーマットプレースホルダーを持つ任意の `format:` と同様に、その出力は `--decorate` や `--walk-reflogs` などの他のオプションの影響を受けません。

  • email

    From <hash> <date>
    From: <author>
    Date: <author-date>
    Subject: [PATCH] <title-line>
    <full-commit-message>
  • mboxrd

    *email* と同様ですが、コミットメッセージの「From 」で始まる行(ゼロ個以上の「>」が前置される)は、「>」で引用符が付けられ、新しいコミットの始まりと誤解されないようにします。

  • raw

    *raw* 形式は、コミットオブジェクトに保存されているコミット全体を正確に表示します。特に、ハッシュは --abbrev または --no-abbrev が使用されているかどうかにかかわらず完全に表示され、*parents* 情報は、グラフや履歴の単純化を考慮せずに、真の親コミットを表示します。この形式はコミットの表示方法には影響しますが、`git log --raw` のような差分の表示方法には影響しないことに注意してください。raw diff形式で完全なオブジェクト名を取得するには、`--no-abbrev` を使用します。

  • format:<format-string>

    *format:<format-string>* 形式では、表示したい情報を指定できます。これはprintf形式と少し似ていますが、*\\n* の代わりに *%n* で改行が得られるという顕著な例外があります。

    例として、*format:"The author of %h was %an, %ar%nThe title was >>%s<<%n"* は次のように表示されます。

    The author of fe6e0ee was Junio C Hamano, 23 hours ago
    The title was >>t4119: test autocomputing -p<n> for traditional diff input.<<

    プレースホルダーは次のとおりです。

    • 単一のリテラル文字に展開されるプレースホルダー

      %n

      改行

      %%

      生の *%*

      %x00

      *%x* に続く2桁の16進数は、その16進数の値を持つバイトに置き換えられます(これをこのドキュメントの残りの部分では「リテラルフォーマットコード」と呼びます)。

    • 後続のプレースホルダーの書式設定に影響するプレースホルダー

      %Cred

      色を赤に切り替える

      %Cgreen

      色を緑に切り替える

      %Cblue

      色を青に切り替える

      %Creset

      色をリセットする

      %C(…​)

      色指定は、git-config[1] の「CONFIGURATION FILE」セクションの「Values」で説明されています。デフォルトでは、色はログ出力で有効になっている場合のみ表示されます(`color.diff`、`color.ui`、または `--color` によって、端末に出力する場合は前者の `auto` 設定を尊重します)。`%C(auto,...)` はデフォルトの歴史的な同義語として受け入れられます(例: `%C(auto,red)`)。`%C(always,...)` を指定すると、色が他の方法で有効になっていない場合でも色が表示されます(ただし、このフォーマットやgitが色付けする可能性のある他のすべてを含む、出力全体の色を有効にするには、単に `--color=always` を使用することを検討してください)。`auto` 単独(つまり `%C(auto)`) は、色が再度切り替わるまで、次のプレースホルダーで自動色付けをオンにします。

      %m

      左 (`<`)、右 (`>`) または境界 (`-`) マーク

      %w([<w>[,<i1>[,<i2>]]])

      git-shortlog[1] の -w オプションのように、行の折り返しを切り替えます。

      %<( <N> [,trunc|ltrunc|mtrunc])

      次のプレースホルダーが少なくともNカラム幅を占めるようにし、必要に応じて右にスペースを埋めます。出力がNカラムよりも長い場合、オプションで左(ltrunc)`..ft`、中央(mtrunc)`mi..le`、または末尾(trunc)`rig..` で(省略記号 *..* を付けて)切り詰めます。注意1: 切り詰めはN >= 2の場合にのみ正しく機能します。注意2: NおよびM(下記参照)の値の周りのスペースはオプションです。注意3: 絵文字やその他の広幅文字は2つの表示カラムを占めるため、カラムの境界を越える可能性があります。注意4: 分解された文字合成マークは、パディング境界で誤って配置される可能性があります。

      %<|( <M> )

      次のプレースホルダーが少なくともM番目の表示カラムまで占めるようにし、必要に応じて右にスペースを埋めます。端末ウィンドウの右端から測定されるカラム位置には負のM値を使用します。

      %>( <N> ), %>|( <M> )

      それぞれ *%<( <N> )*、*%<|( <M> )* に似ていますが、左にスペースを埋めます

      %>>( <N> ), %>>|( <M> )

      それぞれ *%>( <N> )*、*%>|( <M> )* に似ていますが、次のプレースホルダーが指定されたよりも多くのスペースを占め、その左にスペースがある場合、それらのスペースを使用します。

      %><( <N> ), %><|( <M> )

      それぞれ *%<( <N> )*、*%<|( <M> )* に似ていますが、両側にスペースを埋めます(つまり、テキストが中央揃えになります)。

    • コミットから抽出された情報に展開されるプレースホルダー

      %H

      コミットハッシュ

      %h

      省略されたコミットハッシュ

      %T

      ツリーハッシュ

      %t

      省略されたツリーハッシュ

      %P

      親ハッシュ

      %p

      省略された親ハッシュ

      %an

      作者名

      %aN

      作者名(.mailmapを尊重、git-shortlog[1] または git-blame[1] を参照)

      %ae

      作者のメールアドレス

      %aE

      作者のメールアドレス (.mailmap を尊重。 git-shortlog[1] または git-blame[1] を参照)

      %al

      作者のメールアドレスのローカルパート (@ 記号より前の部分)

      %aL

      作者のローカルパート (%al を参照。 .mailmap を尊重。 git-shortlog[1] または git-blame[1] を参照)

      %ad

      作者の日付 (--date= オプションの書式を尊重)

      %aD

      作者の日付、RFC2822 形式

      %ar

      作者の日付、相対形式

      %at

      作者の日付、UNIX タイムスタンプ

      %ai

      作者の日付、ISO 8601 風の書式

      %aI

      作者の日付、厳密な ISO 8601 形式

      %as

      作者の日付、短い書式 (YYYY-MM-DD)

      %ah

      作者の日付、人間可読形式 (git-rev-list[1]--date=human オプションと同様)

      %cn

      コミッター名

      %cN

      コミッター名 (.mailmap を尊重。 git-shortlog[1] または git-blame[1] を参照)

      %ce

      コミッターのメールアドレス

      %cE

      コミッターのメールアドレス (.mailmap を尊重。 git-shortlog[1] または git-blame[1] を参照)

      %cl

      コミッターのメールアドレスのローカルパート (@ 記号より前の部分)

      %cL

      コミッターのローカルパート (%cl を参照。 .mailmap を尊重。 git-shortlog[1] または git-blame[1] を参照)

      %cd

      コミッターの日付 (--date= オプションの書式を尊重)

      %cD

      コミッターの日付、RFC2822 形式

      %cr

      コミッターの日付、相対形式

      %ct

      コミッターの日付、UNIX タイムスタンプ

      %ci

      コミッターの日付、ISO 8601 風の書式

      %cI

      コミッターの日付、厳密な ISO 8601 形式

      %cs

      コミッターの日付、短い書式 (YYYY-MM-DD)

      %ch

      コミッターの日付、人間可読形式 (git-rev-list[1]--date=human オプションと同様)

      %d

      参照名 (git-log[1] の --decorate オプションと同様)

      %D

      " (" と ")" によるラップがない参照名。

      %(decorate[:<options>])

      カスタム装飾付きの参照名。decorate 文字列の後には、コロンと0個以上のカンマ区切りのオプションが続く場合があります。オプション値にはリテラル書式コードを含めることができます。これらは、オプション構文における役割のため、カンマ (%x2C) と閉じ括弧 (%x29) に使用する必要があります。

      • prefix=<value>: 参照名のリストの前に表示されます。デフォルトは " (" です。

      • suffix=<value>: 参照名のリストの後に表示されます。デフォルトは ")" です。

      • separator=<value>: 参照名の間に表示されます。デフォルトは ", " です。

      • pointer=<value>: HEADとそれが指すブランチの間に表示されます (もしあれば)。デフォルトは " -> " です。

      • tag=<value>: タグ名の前に表示されます。デフォルトは "tag: " です。

    例えば、ラッピングやタグ注釈がなく、区切り文字としてスペースを使用する装飾を生成するには

    + %(decorate:prefix=,suffix=,tag=,separator= )

    %(describe[:<options>])

    人間が読める名前 (git-describe[1] と同様)。説明できないコミットの場合は空文字列。describe 文字列の後にコロンと0個以上のカンマ区切りのオプションが続く場合があります。タグが同時に追加または削除される場合、説明は不整合になることがあります。

    • tags[=<bool-value>]: 注釈付きタグのみを考慮するのではなく、軽量タグも考慮します。

    • abbrev=<number>: 省略されたオブジェクト名のデフォルトの16進数桁数 (リポジトリ内のオブジェクト数によって異なり、デフォルトは7) を使用する代わりに、<number>桁、または一意のオブジェクト名を形成するのに必要なだけの桁数を使用します。

    • match=<pattern>: 指定された glob(7) パターンに一致するタグのみを考慮し、"refs/tags/" プレフィックスは除外します。

    • exclude=<pattern>: 指定された glob(7) パターンに一致するタグを考慮しません。 "refs/tags/" プレフィックスは除外します。

    %S

    コミットが到達されたコマンドラインで与えられた参照名 (git log --source のよう)。git log のみで動作します。

    %e

    エンコーディング

    %s

    サブジェクト

    %f

    ファイル名に適した、サニタイズされたサブジェクト行

    %b

    本文

    %B

    生の本文 (ラップされていないサブジェクトと本文)

    %N

    コミットノート

    %GG

    署名付きコミットのGPGからの生の検証メッセージ

    %G?

    良好 (有効) な署名には "G"、不正な署名には "B"、有効性が不明な良好な署名には "U"、期限切れの良好な署名には "X"、期限切れのキーで作成された良好な署名には "Y"、失効したキーで作成された良好な署名には "R"、署名を確認できない場合 (例: キーが見つからない) には "E"、署名がない場合には "N" を表示します。

    %GS

    署名付きコミットの署名者の名前を表示します。

    %GK

    署名付きコミットの署名に使用されたキーを表示します。

    %GF

    署名付きコミットの署名に使用されたキーのフィンガープリントを表示します。

    %GP

    署名付きコミットの署名にサブキーが使用されたプライマリキーのフィンガープリントを表示します。

    %GT

    署名付きコミットの署名に使用されたキーの信頼レベルを表示します。

    %gD

    reflog セレクター。例: refs/stash@{1} または refs/stash@{2 minutes ago}; 書式は -g オプションで説明されている規則に従います。@ より前の部分は、コマンドラインで指定された参照名です (したがって git log -g refs/heads/masterrefs/heads/master@{0} を生成します)。

    %gd

    短縮された reflog セレクター。%gD と同じですが、人間が読めるように参照名部分が短縮されます (したがって refs/heads/mastermaster になります)。

    %gn

    reflog 識別名

    %gN

    reflog 識別名 (.mailmap を尊重。 git-shortlog[1] または git-blame[1] を参照)

    %ge

    reflog 識別メールアドレス

    %gE

    reflog 識別メールアドレス (.mailmap を尊重。 git-shortlog[1] または git-blame[1] を参照)

    %gs

    reflog サブジェクト

    %(trailers[:<options>])

    git-interpret-trailers[1] によって解釈された本文のトレーラーを表示します。trailers 文字列の後にコロンと0個以上のカンマ区切りのオプションが続く場合があります。いずれかのオプションが複数回指定された場合、最後の指定が優先されます。

    • key=<key>: 指定された <key> を持つトレーラーのみを表示します。照合は大文字と小文字を区別せず行われ、末尾のコロンはオプションです。オプションが複数回指定された場合、いずれかのキーに一致するトレーラー行が表示されます。このオプションは only オプションを自動的に有効にし、トレーラーブロック内のトレーラー以外の行を非表示にします。これを望まない場合は only=false で無効にできます。例: %(trailers:key=Reviewed-by) はキーが Reviewed-by のトレーラー行を表示します。

    • only[=<bool>]: トレーラーブロックからトレーラー以外の行を含めるかどうかを選択します。

    • separator=<sep>: トレーラー行間に挿入される区切り文字を指定します。デフォルトは改行文字です。文字列 <sep> には、上記の literal formatting codes を含めることができます。カンマを区切り文字として使用するには、%x2C を使用する必要があります。そうしないと次のオプションとして解析されてしまうためです。例: %(trailers:key=Ticket,separator=%x2C ) は、キーが "Ticket" のすべてのトレーラー行をカンマとスペースで区切って表示します。

    • unfold[=<bool>]: interpret-trailer の --unfold オプションが与えられたかのように動作させます。例: %(trailers:only,unfold=true) はすべてのトレーラー行を展開して表示します。

    • keyonly[=<bool>]: トレーラーのキー部分のみを表示します。

    • valueonly[=<bool>]: トレーラーの値部分のみを表示します。

    • key_value_separator=<sep>: 各トレーラーのキーと値の間に挿入される区切り文字を指定します。デフォルトは ": " です。それ以外は、上記の separator=<sep> と同じセマンティクスを共有します。

注意
一部のプレースホルダーは、リビジョン走査エンジンに与えられた他のオプションに依存する場合があります。例えば、%g* reflog オプションは、reflogエントリを走査している場合 (例: git log -g) でない限り、空文字列を挿入します。%d および %D プレースホルダーは、--decorate がコマンドラインで既に指定されていない場合、「short」装飾形式を使用します。

ブール値オプションは、オプションの値 [=<bool-value>] を受け入れます。--type=bool git-config[1] が受け入れる yesoff のような値はすべて受け入れられます。=<value> なしでブール値オプションを指定することは、=true で指定することと同等です。

プレースホルダーの % の後に + (プラス記号) を追加すると、プレースホルダーが空でない文字列に展開された場合に限り、展開の直前に改行が挿入されます。

プレースホルダーの % の後に - (マイナス記号) を追加すると、プレースホルダーが空文字列に展開された場合に限り、展開の直前の連続する改行がすべて削除されます。

プレースホルダーの % の後に ` ` (スペース) を追加すると、プレースホルダーが空でない文字列に展開された場合に限り、展開の直前にスペースが挿入されます。

  • tformat

    tformat: 形式は format: とまったく同じように機能しますが、「セパレーター」セマンティクスではなく「ターミネーター」セマンティクスを提供します。つまり、各コミットには、エントリ間にセパレーターが配置されるのではなく、メッセージ終端文字 (通常は改行) が追加されます。これにより、単一行形式の最後のエントリも、「oneline」形式と同様に、改行で適切に終端されます。例えば

    $ git log -2 --pretty=format:%h 4da45bef \
      | perl -pe '$_ .= " -- NO NEWLINE\n" unless /\n/'
    4da45be
    7134973 -- NO NEWLINE
    
    $ git log -2 --pretty=tformat:%h 4da45bef \
      | perl -pe '$_ .= " -- NO NEWLINE\n" unless /\n/'
    4da45be
    7134973

    さらに、% を含む認識されない文字列は、先頭に tformat: があるかのように解釈されます。例えば、以下の2つは同等です。

    $ git log -2 --pretty=tformat:%h 4da45bef
    $ git log -2 --pretty=%h 4da45bef

Raw 出力形式

git-diff-indexgit-diff-treegit-diff-files、および git diff --raw の生出力形式は非常によく似ています。

これらのコマンドはすべて2つのもののセットを比較します。比較対象は異なります。

git-diff-index <tree-ish>

<tree-ish> とファイルシステム上のファイルを比較します。

git-diff-index --cached <tree-ish>

<tree-ish> とインデックスを比較します。

git-diff-tree [-r] <tree-ish-1> <tree-ish-2> [<pattern>...]

2つの引数で指定されたツリーを比較します。

git-diff-files [<pattern>...]

インデックスとファイルシステム上のファイルを比較します。

git-diff-tree コマンドは、比較対象のハッシュを出力して開始します。その後、すべてのコマンドは変更されたファイルごとに1行の出力を生成します。

出力行はこのようにフォーマットされます。

in-place edit  :100644 100644 bcd1234 0123456 M file0
copy-edit      :100644 100644 abcd123 1234567 C68 file1 file2
rename-edit    :100644 100644 abcd123 1234567 R86 file1 file3
create         :000000 100644 0000000 1234567 A file4
delete         :100644 000000 1234567 0000000 D file5
unmerged       :000000 000000 0000000 0000000 U file6

つまり、左から右へ

  1. コロン。

  2. "src" のモード。作成またはマージされていない場合は 000000。

  3. スペース。

  4. "dst" のモード。削除またはマージされていない場合は 000000。

  5. スペース。

  6. "src" のSHA1。作成またはマージされていない場合は 0{40}。

  7. スペース。

  8. "dst" のSHA1。削除、マージされていない、または「作業ツリーがインデックスと同期していない」場合は 0{40}。

  9. スペース。

  10. ステータス、オプションで「スコア」番号が続く。

  11. -z オプションが使用された場合はタブまたはNUL。

  12. "src" のパス

  13. -z オプションが使用された場合はタブまたはNUL; C または R の場合にのみ存在する。

  14. "dst" のパス; C または R の場合にのみ存在する。

  15. レコードを終端するためのLFまたはNUL (-z オプションが使用された場合)。

可能なステータス文字は次のとおりです。

  • A: ファイルの追加

  • C: ファイルを新しいものにコピー

  • D: ファイルの削除

  • M: ファイルの内容またはモードの変更

  • R: ファイルの名前変更

  • T: ファイルの種類の変更 (通常ファイル、シンボリックリンク、またはサブモジュール)

  • U: ファイルがマージされていない (コミットする前にマージを完了する必要があります)

  • X: 「不明な」変更タイプ (おそらくバグですので報告してください)

ステータス文字 C および R の後には必ずスコアが続きます (移動またはコピーの元と先の間の類似性の割合を示します)。ステータス文字 M の後には、ファイルのリライトの場合にスコアが続く場合があります (非類似性の割合を示します)。

ファイルシステム上のファイルがインデックスと同期していない場合、「dst」のSHA1はすべて0で表示されます。

:100644 100644 5be4a4a 0000000 M file.c

-z オプションがない場合、「通常でない」文字を含むパス名は、設定変数 core.quotePath (git-config[1] を参照) で説明されているように引用符で囲まれます。-z を使用すると、ファイル名はそのまま出力され、行はNULバイトで終端されます。

マージの差分形式

git-diff-treegit-diff-files、および git-diff --raw は、マージコミットに対しても差分出力を生成するために -c または --cc オプションを受け入れることができます。出力は上記の形式とは次の点で異なります。

  1. 各親にコロンがある

  2. より多くの「src」モードと「src」SHA1がある

  3. ステータスは各親のステータス文字を連結したもの

  4. オプションの「スコア」番号がない

  5. タブ区切りのファイルパス名

-c および --cc の場合、履歴のどの側でファイルが名前変更されていても、宛先または最終パスのみが表示されます。--combined-all-paths を使用すると、各親のパス名が、マージコミットでのパス名の後に表示されます。

-c および --cc--combined-all-paths なしの場合の例

::100644 100644 100644 fabadb8 cc95eb0 4866510 MM	desc.c
::100755 100755 100755 52b7a2d 6d1ac04 d2ac7d7 RM	bar.sh
::100644 100644 100644 e07d6c5 9042e82 ee91881 RR	phooey.c

-c または --cc のいずれかに --combined-all-paths が追加された場合の例

::100644 100644 100644 fabadb8 cc95eb0 4866510 MM	desc.c	desc.c	desc.c
::100755 100755 100755 52b7a2d 6d1ac04 d2ac7d7 RM	foo.sh	bar.sh	bar.sh
::100644 100644 100644 e07d6c5 9042e82 ee91881 RR	fooey.c	fuey.c	phooey.c

結合された差分は、すべての親から変更されたファイルのみをリストすることに注意してください。

-p によるパッチテキストの生成

-p オプションを指定して git-diff[1]git-log[1]git-show[1]git-diff-index[1]git-diff-tree[1]、または git-diff-files[1] を実行すると、パッチテキストが生成されます。パッチテキストの作成は、GIT_EXTERNAL_DIFF および GIT_DIFF_OPTS 環境変数 (git[1] を参照) および diff 属性 (gitattributes[5] を参照) を介してカスタマイズできます。

-p オプションが生成するものは、従来の差分形式とは若干異なります。

  1. 以下のような「git diff」ヘッダーが前に付きます。

    diff --git a/file1 b/file2

    a/b/ のファイル名は、名前変更/コピーが関与していない限り同じです。特に、作成または削除の場合でも、a/ または b/ のファイル名の代わりに /dev/null は使用されません。

    名前変更/コピーが関与している場合、file1file2 はそれぞれ、名前変更/コピーのソースファイルの名前と、名前変更/コピーによって生成されるファイルの名前を示します。

  2. その後、1つ以上の拡張ヘッダー行が続きます。

    old mode <mode> new mode <mode> deleted file mode <mode> new file mode <mode> copy from <path> copy to <path> rename from <path> rename to <path> similarity index <number> dissimilarity index <number> index <hash>..<hash> <mode>

    ファイルモード <mode> は、ファイルタイプとファイルパーミッションビットを含む6桁の8進数で表示されます。

    拡張ヘッダー内のパス名には、a/ および b/ プレフィックスは含まれません。

    類似度インデックスは変更されていない行の割合であり、非類似度インデックスは変更された行の割合です。これは、パーセント記号が続く切り捨てられた整数です。したがって、類似度インデックスの値100%は2つの同一のファイルのために予約されており、100%の非類似度は、古いファイルからの行が新しいファイルにまったく残っていないことを意味します。

    インデックス行には、変更前後のブロブオブジェクト名が含まれます。ファイルモードが変更されない場合は <mode> が含まれます。それ以外の場合は、別の行で古いモードと新しいモードが示されます。

  3. 「通常でない」文字を含むパス名は、設定変数 core.quotePath (git-config[1] を参照) で説明されているように引用符で囲まれます。

  4. 出力内のすべての file1 ファイルはコミット前のファイルを参照し、すべての file2 ファイルはコミット後のファイルを参照します。各変更を各ファイルに順次適用するのは誤りです。例えば、このパッチは a と b を入れ替えます。

    diff --git a/a b/b
    rename from a
    rename to b
    diff --git a/b b/a
    rename from b
    rename to a
  5. ハンクヘッダーは、そのハンクが適用される関数の名前を記述します。特定の言語に合わせてこれを調整する方法の詳細については、gitattributes[5] の「Defining a custom hunk-header」を参照してください。

結合差分形式

任意の差分生成コマンドは、マージを表示する際に結合差分を生成するために -c または --cc オプションを受け入れることができます。これは git-diff[1] または git-show[1] でマージを表示する際のデフォルト形式です。また、これらのコマンドのいずれかに適切な --diff-merges オプションを指定して、特定の形式での差分生成を強制することもできます。

「結合差分」形式はこのようになります。

diff --combined describe.c
index fabadb8,cc95eb0..4866510
--- a/describe.c
+++ b/describe.c
@@@ -98,20 -98,12 +98,20 @@@
	return (a_date > b_date) ? -1 : (a_date == b_date) ? 0 : 1;
  }

- static void describe(char *arg)
 -static void describe(struct commit *cmit, int last_one)
++static void describe(char *arg, int last_one)
  {
 +	unsigned char sha1[20];
 +	struct commit *cmit;
	struct commit_list *list;
	static int initialized = 0;
	struct commit_name *n;

 +	if (get_sha1(arg, sha1) < 0)
 +		usage(describe_usage);
 +	cmit = lookup_commit_reference(sha1);
 +	if (!cmit)
 +		usage(describe_usage);
 +
	if (!initialized) {
		initialized = 1;
		for_each_ref(get_name);
  1. 以下のような「git diff」ヘッダーが前に付きます (-c オプションが使用された場合)。

    diff --combined file

    またはこのようになります (--cc オプションが使用された場合)。

    diff --cc file
  2. その後、1つ以上の拡張ヘッダー行が続きます (この例は2つの親を持つマージを示しています)。

    index <hash>,<hash>..<hash> mode <mode>,<mode>..<mode> new file mode <mode> deleted file mode <mode>,<mode>

    mode <mode>,<mode>..<mode> 行は、<mode> の少なくとも1つが残りのものと異なる場合にのみ表示されます。検出されたコンテンツの移動 (名前変更とコピー検出) に関する情報を含む拡張ヘッダーは、2つの <tree-ish> の差分で機能するように設計されており、結合差分形式では使用されません。

  3. その後、2行の from-file/to-file ヘッダーが続きます。

    --- a/file
    +++ b/file

    従来の unified 差分形式の2行ヘッダーと同様に、/dev/null は作成または削除されたファイルを示すために使用されます。

    ただし、--combined-all-paths オプションが提供された場合、2行の from-file/to-file ヘッダーではなく、N+1 行の from-file/to-file ヘッダーが取得されます。ここで N はマージコミットの親の数です。

    --- a/file
    --- a/file
    --- a/file
    +++ b/file

    この拡張形式は、名前変更またはコピー検出がアクティブな場合に、異なる親でのファイルの元の名前を確認できるため便利です。

  4. チャンクヘッダー形式は、誤って patch -p1 に渡されるのを防ぐために変更されています。結合差分形式はマージコミットの変更をレビューするために作成されたものであり、適用されることを意図したものではありません。この変更は、拡張 index ヘッダーの変更に似ています。

    @@@ <from-file-range> <from-file-range> <to-file-range> @@@

    結合差分形式のチャンクヘッダーには、(親の数 + 1) 個の @ 文字があります。

従来の unified 差分形式は、2つのファイルAとBを単一の列で示し、- (マイナス — Aに存在するがBでは削除されている)、+ (プラス — AにないがBに追加されている)、または " " (スペース — 変更なし) のプレフィックスを持ちますが、この形式は2つ以上のファイル file1, file2,…​ を1つのファイルXと比較し、Xが各 fileN とどのように異なるかを示します。Xの行が各 fileN とどのように異なるかを示すために、各 fileN の列が出力行の前に付けられます。

列Nの - 文字は、その行が fileN に存在するが結果には存在しないことを意味します。列Nの + 文字は、その行が結果に存在し、fileN にその行がないこと (つまり、その親の観点から行が追加されたこと) を意味します。

上記の出力例では、関数のシグネチャが両方のファイルから変更されました (そのため、file1 と file2 の両方から2つの - が削除され、さらに ++ は追加された1行が file1 または file2 のいずれにも存在しないことを意味します)。また、他の8行は file1 と同じですが file2 には存在しません (そのため + がプレフィックスとして付いています)。

git diff-tree -c で表示される場合、マージコミットの親とマージ結果を比較します (つまり、file1..fileN は親です)。git diff-files -c で表示される場合、2つの未解決のマージ親と作業ツリーファイルを比較します (つまり、file1 はステージ2、別名「our version」、file2 はステージ3、別名「their version」です)。

その他の差分形式

--summary オプションは、新しく追加、削除、名前変更、コピーされたファイルを記述します。--stat オプションは、diffstat(1) グラフを出力に追加します。これらのオプションは -p などの他のオプションと組み合わせることができ、人間が読むことを目的としています。

名前変更またはコピーを含む変更を表示する場合、--stat の出力は、パス名の共通のプレフィックスとサフィックスを結合することでパス名をコンパクトにフォーマットします。例えば、arch/i386/Makefilearch/x86/Makefile に移動し、4行を変更する変更は次のように表示されます。

arch/{i386 => x86}/Makefile    |   4 +--

--numstat オプションは diffstat(1) の情報を提供しますが、より機械での消費を容易にするように設計されています。--numstat 出力の1エントリはこのようになります。

1	2	README
3	1	arch/{i386 => x86}/Makefile

つまり、左から右へ

  1. 追加された行数;

  2. タブ;

  3. 削除された行数;

  4. タブ;

  5. パス名 (名前変更/コピー情報を含む場合あり);

  6. 改行。

-z 出力オプションが有効な場合、出力はこのようにフォーマットされます。

1	2	README NUL
3	1	NUL arch/i386/Makefile NUL arch/x86/Makefile NUL

つまり

  1. 追加された行数;

  2. タブ;

  3. 削除された行数;

  4. タブ;

  5. NUL (名前変更/コピーされた場合にのみ存在する);

  6. 変更前のパス名;

  7. NUL (名前変更/コピーされた場合にのみ存在する);

  8. 変更後のパス名 (名前変更/コピーされた場合にのみ存在する);

  9. NUL。

名前変更の場合にプリイメージパスの前に余分なNULがあるのは、出力を読み取るスクリプトが、先読みせずに現在読み取っているレコードが単一パスレコードなのか名前変更/コピーレコードなのかを判別できるようにするためです。追加および削除された行を読み取った後、NULまで読み取るとパス名が得られますが、それがNULである場合、レコードは2つのパスを示します。

GIT

git[1] スイートの一部

scroll-to-top