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

名前

git-diff-tree - 2つのツリーオブジェクトで見つかったBLOBのコンテンツとモードを比較します

概要

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つのツリーオブジェクトで見つかったBLOBのコンテンツとモードを比較します。

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

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

オプション

-p
-u
--patch

パッチを生成します (Generating patch text with -p を参照)。

-s
--no-patch

差分機構からのすべての出力を抑制します。デフォルトでパッチを表示するgit showのようなコマンドの出力を抑制したり、エイリアスでコマンドライン上の--patch--statのようなオプションの効果を取り消したりするのに便利です。

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

通常の 3 行ではなく、<n> 行のコンテキストを持つ diff を生成します。--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 ハンク境界をシフトするヒューリスティックを有効にします。これがデフォルトです。

--no-indent-heuristic

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

--minimal

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

--patience

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

--histogram

「ヒストグラム diff」アルゴリズムを使用して差分を生成します。

--anchored=<text>

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

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

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

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

diff アルゴリズムを選択します。バリアントは以下の通りです

default
myers

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

minimal

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

patience

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

histogram

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

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

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

差分統計を生成します。デフォルトでは、ファイル名部分には必要なだけのスペースが使用され、残りはグラフ部分に充てられます。最大幅はターミナルの幅、またはターミナルに接続されていない場合は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

変更された各ファイルのポストイメージツリーのファイル名のみを表示します。ファイル名はしばしば 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>alwaysneverautoのいずれかです。

--no-color

カラー差分をオフにします。--color=never と同じです。

--color-moved[=<mode>]

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

no

移動した行はハイライトされません。

default

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

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

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

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

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

--full-index

パッチ形式出力を生成する際に、「index」行に最初の数文字ではなく、プレイメージとポストイメージの完全なブロブオブジェクト名を表示します。

--binary

--full-index に加えて、git-apply で適用できるバイナリ差分を出力します。--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間の差分は印刷しません。結果のパッチはpatchgit 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>

指定された <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 を検索します。

オブジェクトはブロブまたはサブモジュールコミットにできます。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>内のグロブパターンの順序によって決定されます。最初のパターンに一致するパス名を持つすべてのファイルが最初に出力され、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

プロジェクトのサブディレクトリから実行する場合、このオプションを使用して、ディレクトリ外の変更を除外し、相対パス名を表示するように指示できます。サブディレクトリにいない場合(たとえば、ベアリポジトリの場合)、<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>

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

-W
--function-context

各変更のコンテキスト行として関数全体を表示します。関数名はgit diffがパッチハンクヘッダーを決定する方法と同様に決定されます(gitattributes[5]の「Defining a custom hunk-header」を参照)。

--exit-code

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

--quiet

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

--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.noprefixdiff.srcPrefixdiff.dstPrefixdiff.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>…​

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

-r

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

-t

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

--root

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

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

指定されたフォーマットでコミットログの内容を整形して表示します。<format>は、onelineshortmediumfullfullerreferenceemailrawformat:<string>tformat:<string>のいずれかになります。<format>が上記のいずれでもなく、%placeholderが含まれている場合、--pretty=tformat:<format>が指定されたかのように動作します。

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

注: リポジトリ設定でデフォルトの整形形式を指定できます (git-config[1] を参照)。

--abbrev-commit

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

これにより、「--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スペースでインデントする整形形式 (つまり、デフォルトである mediumfull、および fuller) ではタブが展開されます。

--notes[=<ref>]

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

デフォルトでは、表示されるノートはcore.notesRefnotes.displayRef変数(または対応する環境変数)にリストされているノートrefから取得されます。詳細についてはgit-config[1]を参照してください。

オプションの<ref>引数を使用すると、そのrefを使用して表示するノートを検索します。refがrefs/notes/で始まる場合、完全なref名として指定できます。notes/で始まる場合、refs/がプレフィックスとして付加され、それ以外の場合はrefs/notes/がプレフィックスとして付加されて、refの完全な名前が形成されます。

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

--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が与えられた場合にのみ有用です)。これは、親と結果のペアごとの差分を一度に表示する(-mオプションが行うこと)代わりに、各親からマージ結果への差分を同時に表示します。さらに、すべての親から変更されたファイルのみをリストアップします。

--cc

このフラグは、-cオプションと同様の方法で、マージコミットパッチの表示方法を変更します。これは-c-pオプションを暗黙的に指定し、親のコンテンツが2種類のバリアントしかなく、マージ結果が修正なしでそれらのいずれかを選択するような興味のないハンクを省略することで、パッチ出力をさらに圧縮します。すべてのハンクが興味のないものである場合、他の「空の差分」の場合と同様に、コミット自体とコミットログメッセージは表示されません。

--combined-all-paths

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

--always

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

PRETTY FORMATS

コミットがマージであり、pretty-formatがonelineemail、または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 " (0 個以上の ">" が先行) で始まる行は ">" で引用され、新しいコミットの開始と混同されないようにします。

  • raw

    raw形式は、コミットオブジェクトに格納されているとおりにコミット全体を表示します。特に、ハッシュは--abbrevまたは--no-abbrevが使用されているかどうかにかかわらず完全に表示され、parents情報は、移植や履歴の簡略化を考慮せずに、真の親コミットを表示します。この形式はコミットの表示方法に影響しますが、たとえばgit log --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]の「CONFIGURATION FILE」セクションの「Values」で説明されています。デフォルトでは、色はログ出力で有効になっている場合のみ表示されます(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 オプションと同様

      %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個以上のコンマ区切りのオプションが続くことがあります。タグが同時に追加または削除されると、説明が inconsistent になることがあります。

    • 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オプションで記述されたルールに従ってフォーマットされます。@より前の部分は、コマンドラインで与えられたrefnameです(したがって、git log -g refs/heads/masterrefs/heads/master@{0}を生成します)。

    %gd

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

    %gn

    リフロッグ識別名

    %gN

    リフロッグ識別名 (.mailmap を尊重。 git-shortlog[1] または git-blame[1] を参照)

    %ge

    リフロッグ識別メール

    %gE

    リフロッグ識別メール (.mailmap を尊重。 git-shortlog[1] または git-blame[1] を参照)

    %gs

    リフロッグ件名

    %(trailers[:<options>])

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

    • 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がまだ提供されていない場合、"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. ステータス。オプションの "score" 数値が続く。

  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: 「不明な」変更タイプ (おそらくバグ、報告してください)

ステータスレターCRの後に常にスコアが続きます(移動またはコピーのソースとターゲット間の類似性のパーセンテージを示します)。ステータスレター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は、マージコミットに対しても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

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

::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 によるパッチテキストの生成

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>

    ファイルモード<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. Hunkヘッダは、そのhunkが適用される関数の名前を示します。特定の言語に合わせてこれを調整する方法の詳細については、gitattributes[5]の「カスタムhunkヘッダの定義」を参照してください。

統合diff形式

マージを表示するときに結合diffを生成するために、どのdiff生成コマンドでも-cまたは--ccオプションを使用できます。これは、git-diff[1]またはgit-show[1]でマージを表示するときのデフォルトの形式です。これらのコマンドのいずれかに適切な--diff-mergesオプションを指定して、特定の形式で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. -cオプションが使用された場合、次のような「git diff」ヘッダーが前に付きます。

    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にフィードするのを防ぐために変更されました。結合差分形式はマージコミットの変更のレビューのために作成され、適用されることを意図していませんでした。この変更は、拡張されたindexヘッダーの変更と同様です。

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

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

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

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

上記の出力例では、関数シグネチャは両方のファイルから変更されました(そのため、file1とfile2の両方からの2つの-削除と、file1またはfile2のいずれにも存在しない1行が追加されたことを意味する++)。また、他の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	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