Git
日本語 ▾ トピック ▾ 最新バージョン ▾ git-diff-tree の最終更新は 2.46.1 です

NAME

git-diff-tree - 2つのツリーオブジェクトから見つかったBLOBの内容とモードを比較する

SYNOPSIS

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>…​]

DESCRIPTION

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

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

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

OPTIONS

-p
-u
--patch

パッチを生成します (「-p を使ってパッチテキストを生成する」を参照)。

-s
--no-patch

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

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

通常の3行ではなく、<n>行のコンテキストでdiffを生成します。 --patch を暗黙的に指定します。

--output=<file>

stdout の代わりに特定のファイルに出力します。

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

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

--raw

raw フォーマットで diff を生成します。 これがデフォルトです。

--patch-with-raw

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

--indent-heuristic

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

--no-indent-heuristic

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

--minimal

可能な限り最小の diff が生成されるように、余分な時間を費やします。

--patience

"patience diff" アルゴリズムを使用して diff を生成します。

--histogram

"histogram diff" アルゴリズムを使用して diff を生成します。

--anchored=<text>

"anchored diff" アルゴリズムを使用して diff を生成します。

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

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

--diff-algorithm={patience|minimal|histogram|myers}

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

default, myers

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

minimal

可能な限り最小の diff が生成されるように、余分な時間を費やします。

patience

パッチを生成するときに "patience diff" アルゴリズムを使用します。

histogram

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

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

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

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

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

--compact-summary

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

--numstat

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

--shortstat

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

-X[<param1,param2,…​>]
--dirstat[=<param1,param2,…​>]

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

changes

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

lines

通常の行ベースの diff 分析を実行し、削除/追加された行数を合計して、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[=<param1,param2>…​]

--dirstat=files,<param1>,<param2>…​ の同義語

--summary

作成、リネーム、モード変更などの拡張ヘッダー情報の要約を簡潔に出力します。

--patch-with-stat

-p --stat の同義語。

-z

--raw--numstat--name-only、または --name-status が指定されている場合、パス名を加工せず、出力フィールドの終端文字として NUL を使用します。

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

--name-only

変更された各ファイルの名前のみを、ポストイメージツリーに表示します。ファイル名は 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が表示されます。デフォルトは diff.submodule または、設定オプションが設定されていない場合は *short* 形式です。

--color[=<when>]

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

--no-color

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

--color-moved[=<mode>]

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

no

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

default

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

plain

ある場所で追加され、別の場所で削除された行は、*color.diff.newMoved* で色付けされます。同様に、diffの他の場所に追加されている削除された行には、*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=<modes>

これは、--color-moved の移動検出を実行するときに空白を無視する方法を設定します。これらのモードは、カンマ区切りのリストとして指定できます

no

移動検出を実行するときに空白を無視しません。

ignore-space-at-eol

EOLでの空白の変更を無視します。

ignore-space-change

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

ignore-all-space

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

allow-indentation-change

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

--no-color-moved-ws

移動検出を実行するときに空白を無視しません。これは、設定をオーバーライドするために使用できます。これは --color-moved-ws=no と同じです。

--word-diff[=<mode>]

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

color

色のみを使用して、変更された単語を強調表示します。--color を暗黙的に意味します。

plain

単語を [-削除済み-] および {+追加済み+} として表示します。入力に区切り文字が表示された場合、エスケープを試みないので、出力があいまいになる可能性があります。

porcelain

スクリプトでの使用を目的とした特別な行ベースの形式を使用します。追加/削除/変更なしの実行は、通常の統一diff形式で出力され、行の先頭に `+` / `-` / ` ` 文字が付き、行末まで拡張されます。入力の改行は、独自の行のチルダ ~ で表されます。

none

単語diffを再度無効にします。

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

--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

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

--check

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

--ws-error-highlight=<kind>

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

--full-index

最初の数文字の代わりに、パッチ形式の出力が生成されるときに、「index」行に、フルなプリイメージおよびポストイメージのblobオブジェクト名を表示します。

--binary

--full-index に加えて、git-apply で適用できるバイナリdiffを出力します。--patch を暗黙的に意味します。

--abbrev[=<n>]

diff-raw形式の出力およびdiff-treeヘッダー行で、完全な40バイトの16進オブジェクト名の代わりに、オブジェクトを一意に参照する少なくとも *<n>* 16進数字の長さの最短プレフィックスを表示します。diff-patch出力形式では、--full-index が優先されます。つまり、--full-index が指定されている場合、--abbrev に関係なく、完全なblob名が表示されます。デフォルト以外の桁数は、--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

削除のプリイメージを省略します。つまり、ヘッダーのみを出力し、プリイメージと/dev/nullの間の差分は出力しません。結果として得られるパッチは、patchまたはgit applyで適用することを意図したものではありません。これは、変更後のテキストのレビューに集中したいだけの人向けのものです。さらに、出力には、そのようなパッチを手動で逆方向に適用するのに十分な情報が明らかに不足しています。これがオプションの名前の由来です。

-Bと組み合わせて使用すると、削除/作成ペアの削除部分のプリイメージも省略されます。

-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)ファイルのみを選択します。フィルター文字の任意の組み合わせ(なしを含む)を使用できます。*(すべてまたはなし)が組み合わせに追加されると、比較で他の基準に一致するファイルがある場合、すべてのパスが選択されます。他の基準に一致するファイルがない場合は、何も選択されません。

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

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

-S<string>

ファイル内の指定された文字列の出現回数を変更する(つまり、追加/削除)差分を探します。スクリプターの使用を目的としています。

(構造体のような)コードの正確なブロックを探していて、それが最初に生成されてからのブロックの履歴を知りたい場合に便利です。この機能を繰り返し使用して、プリイメージ内の興味深いブロックを-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を検索します。

オブジェクトは、blobまたはサブモジュールコミットにすることができます。これは、ツリーも検索するために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>は次のように解析されます。

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

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

  • その他すべての行には、単一のパターンが含まれています。

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

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

名前付きの<file>の前のファイルを(つまり、スキップ先)出力から破棄するか、出力の最後に移動します(つまり、ローテート先)。これらのオプションは、主にgit difftoolコマンドの使用のために作成されたものであり、それ以外の場合はあまり役に立たない可能性があります。

-R

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

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

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

-a
--text

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

--ignore-cr-at-eol

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

--ignore-space-at-eol

EOLでの空白の変更を無視します。

-b
--ignore-space-change

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

-w
--ignore-all-space

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

--ignore-blank-lines

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

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

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

--inter-hunk-context=<lines>

差分ハンク間のコンテキストを、指定された行数まで表示し、それによって互いに近いハンクを融合します。デフォルトは、diff.interHunkContextまたは構成オプションが設定されていない場合は0です。

-W
--function-context

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

--exit-code

プログラムがdiff(1)と同様のコードで終了するようにします。つまり、差分があった場合は1で終了し、差分がない場合は0を意味します。

--quiet

プログラムのすべての出力を無効にします。--exit-codeを暗黙的に意味します。終了コードが信頼されていない外部差分ヘルパーの実行を無効にします。つまり、それぞれの構成オプションdiff.trustExitCodeまたはdiff.<driver>.trustExitCodeまたは環境変数GIT_EXTERNAL_DIFF_TRUST_EXIT_CODEがfalseである場合です。

--ext-diff

外部差分ヘルパーを実行できるようにします。gitattributes[5]で外部差分ドライバーを設定した場合、git-log[1]などと一緒にこのオプションを使用する必要があります。

--no-ext-diff

外部差分ドライバーを許可しません。

--textconv
--no-textconv

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

--ignore-submodules[=<when>]

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

--src-prefix=<prefix>

"a/"の代わりに指定されたソースプレフィックスを表示します。

--dst-prefix=<prefix>

"b/"の代わりに指定されたデスティネーションプレフィックスを表示します。

--no-prefix

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

--default-prefix

デフォルトのソースおよびデスティネーションプレフィックス("a/"と"b/")を使用します。これは、diff.noprefixdiff.srcPrefixdiff.dstPrefix、およびdiff.mnemonicPrefixなどの構成変数を上書きします(git-config(1)を参照)。

--line-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>…​

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

-r

サブツリーに再帰的に処理します。

-t

サブツリーだけでなく、ツリーエントリ自体も表示します。-rを暗黙的に意味します。

--root

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

--merge-base

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

--stdin

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

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>

コミットログの内容を、指定された形式でpretty-printします。<format>には、onelineshortmediumfullfullerreferenceemailrawformat:<string>、およびtformat:<string>のいずれかを指定できます。<format>が上記以外のいずれでもなく、%placeholderが含まれている場合、--pretty=tformat:<format>が指定されたかのように動作します。

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

注:リポジトリ構成でデフォルトのpretty formatを指定できます(git-config[1]を参照)。

--abbrev-commit

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

これにより、80桁のターミナルを使用しているユーザーにとって、"--pretty=oneline"が非常に読みやすくなります。

--no-abbrev-commit

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

--oneline

これは、一緒に使用される"--pretty=oneline --abbrev-commit"の短縮形です。

--encoding=<encoding>

コミットオブジェクトは、ログメッセージに使用される文字エンコーディングをエンコーディングヘッダーに記録します。このオプションを使用して、ユーザーが優先するエンコーディングでコミットログメッセージを再エンコードするようにコマンドに指示できます。plumbingコマンド以外のコマンドの場合、これはデフォルトで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形式(つまり、デフォルトのmediumfull、およびfuller)でタブが展開されます。

--notes[=<ref>]

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

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

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

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

--no-notes

ノートを表示しません。これは、ノートが表示されるノート参照のリストをリセットすることにより、上記の--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 が指定された場合にのみ有用です)。各親からマージ結果への差分を、親と結果の間のペアワイズな差分を一度に表示するのではなく(これが -m オプションの動作)、同時に表示します。さらに、すべての親から変更されたファイルのみをリストします。

--cc

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

--combined-all-paths

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

--always

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

PRETTY FORMATS

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

組み込みのフォーマットがいくつかあり、pretty.<name> config オプションを別のフォーマット名、または以下で説明する *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 」(0個以上の「>」が先行)で始まるコミットメッセージ内の行は、新しいコミットの開始と誤解されないように、「>」で引用符で囲まれます。

  • raw

    raw フォーマットは、コミットオブジェクトに格納されているとおりに、コミット全体を正確に表示します。特に、ハッシュは、--abbrev または --no-abbrev が使用されているかどうかに関係なく、すべて表示され、*parents* 情報は、graft や履歴の簡略化を考慮せずに、真の親コミットを示します。このフォーマットは、コミットの表示方法に影響しますが、git log --raw のように差分の表示方法には影響しないことに注意してください。raw 差分フォーマットでオブジェクト名をすべて表示するには、--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] の「設定ファイル」セクションの「値」で説明されている色の指定。デフォルトでは、ログ出力(color.diffcolor.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オプションのようなref名

      %D

      " ("、")"で囲まないref名。

      %(decorate[:<options>])

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

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

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

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

      • 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

    コミットに到達したコマンドラインで与えられたref名(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オプションについて説明したルールに従います。@の前にある部分は、コマンドラインで与えられたrefnameです(したがって、git log -g refs/heads/masterrefs/heads/master@{0}を生成します)。

    %gd

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

    %gn

    reflog ID名

    %gN

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

    %ge

    reflog IDメール

    %gE

    reflog IDメール(.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>には、上記で説明したリテラルの書式コードを含めることができます。区切り文字としてカンマを使用するには、次のオプションとして解析されるため、%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がまだ提供されていない場合は、「短い」装飾形式を使用します。

ブールオプションは、オプション値[=<bool-value>]を受け入れます。値truefalseonoffなどはすべて受け入れられます。git-config[1]の「例」の「boolean」サブセクションを参照してください。ブールオプションが値なしで指定された場合、有効になります。

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

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

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

  • 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-index"、"git-diff-tree"、"git-diff-files"、および"git diff --raw"からの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 または -z オプションが使用された場合は NUL。レコードを終了します。

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

  • 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 バイトで終了します。

マージの diff 形式

"git-diff-tree"、"git-diff-files"、および "git-diff --raw" は、マージコミットの diff 出力も生成するために -c または --cc オプションを使用できます。出力は、以下に示す点で上記で説明した形式とは異なります。

  1. 各親にコロンがあります

  2. より多くの "src" モードと "src" sha1 があります

  3. ステータスは、各親の連結されたステータス文字です

  4. オプションの "スコア" 数値はありません

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

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

--combined-all-paths を使用しない -c--cc の例

::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

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

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

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

-p オプションが生成するものは、従来の diff 形式とはわずかに異なります。

  1. 次のような "git diff" ヘッダーが先頭に付いています。

    diff --git a/file1 b/file2

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

    名前変更/コピーが関与する場合、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>

    ファイルモードは、ファイルタイプとファイル権限ビットを含む6桁の8進数として出力されます。

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

    類似性インデックスは、変更されていない行のパーセンテージであり、非類似性インデックスは、変更された行のパーセンテージです。丸められた整数で、その後にパーセント記号が続きます。したがって、100% の類似性インデックス値は、2 つの等しいファイル用に予約されており、100% の非類似性は、古いファイルの行が新しいファイルにまったく含まれていないことを意味します。

    インデックス行には、変更の前後の blob オブジェクト名が含まれています。ファイルモードが変更されない場合は <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]の「カスタムハンクヘッダーの定義」を参照してください。

結合 diff 形式

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

"結合diff"形式は次のようになります。

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

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

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

    従来のunified diff 形式の 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 に誤ってフィードしないように変更されています。結合 diff 形式は、マージコミットの変更をレビューするために作成されたものであり、適用されることは想定されていませんでした。変更は、拡張された index ヘッダーの変更と似ています。

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

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

- (マイナス - A には表示されるが B で削除された)、+ (プラス - A には存在しないが B に追加された)、または " " (スペース - 変更なし) のプレフィックスを持つ単一の列を持つ 2 つのファイル A と B を示す従来の unified diff 形式とは異なり、この形式は、1 つのファイル X と 2 つ以上のファイル file1、file2,…​ を比較し、X が fileN のそれぞれとどのように異なるかを示します。X の行がそれとどのように異なるかを示すために、各 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 (「私たちのバージョン」)、file2 はステージ 3 (「彼らのバージョン」) です)。

その他のdiff形式

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

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

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

--numstat オプションは diffstat(1) 情報を提供しますが、より簡単な機械消費のために設計されています。--numstat 出力の項目は、次のようになります。

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