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

名前

git-diff - コミット間、コミットと作業ツリー間などの変更を表示する

概要

git diff [<options>] [<commit>] [--] [<path>…​]
git diff [<options>] --cached [--merge-base] [<commit>] [--] [<path>…​]
git diff [<options>] [--merge-base] <commit> [<commit>…​] <commit> [--] [<path>…​]
git diff [<options>] <commit>...<commit> [--] [<path>…​]
git diff [<options>] <blob> <blob>
git diff [<options>] --no-index [--] <path> <path>

説明

作業ツリーとインデックスまたはツリー間の変更、インデックスとツリー間の変更、2つのツリー間の変更、マージの結果生じる変更、2つのブロブオブジェクト間の変更、またはディスク上の2つのファイル間の変更を表示します。

git diff [<options>] [--] [<path>...]

この形式は、インデックス (次のコミットのステージング領域) に対して行った変更を表示するためのものです。言い換えれば、その差分は、Git にインデックスにさらに追加するように指示する「可能性のある」ものですが、まだ追加していません。git-add[1] を使用してこれらの変更をステージングできます。

git diff [<options>] --no-index [--] <path> <path>

この形式は、ファイルシステム上の指定された2つのパスを比較するためのものです。Git によって制御されている作業ツリー内でコマンドを実行し、少なくとも1つのパスが作業ツリー外を指している場合、またはGit によって制御されている作業ツリー外でコマンドを実行している場合、--no-index オプションを省略できます。この形式は --exit-code を含意します。

git diff [<options>] --cached [--merge-base] [<commit>] [--] [<path>...]

この形式は、指定された <commit> に対して、次のコミットのためにステージングした変更を表示するためのものです。通常、最新のコミットとの比較が必要なため、<commit> を指定しない場合、デフォルトで HEAD になります。HEAD が存在しない場合 (例: 未誕生のブランチ) で、<commit> が指定されていない場合、すべてのステージングされた変更が表示されます。--staged--cached の同義語です。

--merge-base が指定されている場合、<commit> の代わりに、<commit>HEAD のマージベースを使用します。git diff --cached --merge-base Agit diff --cached $(git merge-base A HEAD) と同等です。

git diff [<options>] [--merge-base] <commit> [--] [<path>...]

この形式は、指定された <commit> に対して、作業ツリーにある変更を表示するためのものです。HEAD を使用して最新のコミットと比較したり、ブランチ名を使用して別のブランチの先端と比較したりできます。

--merge-base が指定されている場合、<commit> の代わりに、<commit>HEAD のマージベースを使用します。git diff --merge-base Agit diff $(git merge-base A HEAD) と同等です。

git diff [<options>] [--merge-base] <commit> <commit> [--] [<path>...]

これは、任意の2つの <commit> 間の変更を表示するためのものです。

--merge-base が指定されている場合、「以前」の側には2つのコミットのマージベースを使用します。git diff --merge-base A Bgit diff $(git merge-base A B) B と同等です。

git diff [<options>] <commit> <commit>...<commit> [--] [<path>...]

この形式は、マージコミットの結果を表示するためのものです。最初にリストされた <commit> はマージ自体でなければならず、残りの2つ以上のコミットはその親である必要があります。望ましいリビジョンのセットを生成する便利な方法は、接尾辞 @^! を使用することです。A がマージコミットの場合、git diff A A^@git diff A^!git show A はすべて同じ結合差分を与えます。

git diff [<options>] <commit>..<commit> [--] [<path>...]

これは、以前の形式 ( .. なし) の同義語で、任意の2つの <commit> 間の変更を表示します。どちらかの側の <commit> が省略された場合、代わりに HEAD を使用した場合と同じ効果があります。

git diff [<options>] <commit>...<commit> [--] [<path>...]

この形式は、両方の <commit> の共通の祖先から始まり、2番目の <commit> を含むブランチ上の変更を表示するためのものです。git diff A...Bgit diff $(git merge-base A B) B と同等です。任意の <commit> のいずれかを省略できます。これは、代わりに HEAD を使用した場合と同じ効果があります。

念のため、上記の記述中のすべての <commit> は、--merge-base の場合と、.. 表記を使用する最後の2つの形式を除いて、任意の <tree> であり得ることが注意されるべきです。興味深いツリーは、マージ競合が発生した際に ort マージ戦略によって書き込まれる AUTO_MERGE という名前の参照が指すツリーです (git-merge[1] を参照)。作業ツリーを AUTO_MERGE と比較すると、テキスト競合を解決するためにこれまでに行った変更が表示されます (以下の例を参照)。

<commit> を記述するより完全な方法のリストについては、gitrevisions[7] の「リビジョンの指定」セクションを参照してください。ただし、diff は範囲ではなく2つの「エンドポイント」を比較するものであり、範囲表記 (<commit>..<commit> および <commit>...<commit>) は、gitrevisions[7] の「範囲の指定」セクションで定義されている範囲を意味しません。

git diff [<options>] <blob> <blob>

この形式は、2つのブロブオブジェクトの生の内容間の差分を表示するためのものです。

オプション

-p
-u
--patch

パッチを生成します (「-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) などの拡張ヘッダー情報の簡潔な概要を差分統計に表示します。この情報は、ファイル名部分とグラフ部分の間に配置されます。--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>alwaysnever、または auto のいずれかです。color.ui および color.diff の設定で変更できます。

--no-color

色付き差分を無効にします。これは設定を上書きするために使用できます。--color=never と同じです。

--color-moved[=<mode>]

移動したコード行を異なる色で表示します。diff.colorMoved 設定で変更できます。オプションが指定されていない場合、<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 の移動検出を実行する際に、空白をどのように無視するかを設定します。diff.colorMovedWS 設定で設定できます。これらのモードはコンマ区切りのリストで指定できます

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 にかかわらず、完全なブロブ名が表示されます。デフォルト以外の桁数は --abbrev=<n> で指定できます。

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

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

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

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

また、これらの大文字は小文字にすることで除外できます。例: --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> は次のように解析されます。

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

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

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

パターンは、FNM_PATHNAME フラグなしの fnmatch(3) で使用されるパターンと同じ構文とセマンティクスを持ちますが、パス名の末尾の任意の数のコンポーネントを削除したものがパターンに一致する場合もパターンに一致します。たとえば、パターン「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-relativediff.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] の「カスタムハンクヘッダーの定義」を参照)。

--exit-code

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

--quiet

プログラムのすべての出力を無効にします。--exit-code を含意します。終了コードが信頼できない外部差分ヘルパー (つまり、それぞれの設定オプション 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.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]も参照してください。

-1
--base
-2
--ours
-3
--theirs

作業ツリーと比較します

  • -1 または --base を使用した場合の「ベース」バージョン (ステージ #1)

  • -2 または --ours を使用した場合の「私たちのブランチ」 (ステージ #2)、または

  • -3 または --theirs を使用した場合の「彼らのブランチ」 (ステージ #3)。

インデックスには、未マージのエントリに対してのみこれらのステージが含まれます。つまり、競合を解決している間のみです。詳細については、git-read-tree[1] の「3方向マージ」セクションを参照してください。

-0

未マージのエントリの差分出力を省略し、「Unmerged」のみを表示します。作業ツリーとインデックスを比較する場合にのみ使用できます。

<path>...

<path> パラメータが指定された場合、差分を指定されたパスに限定するために使用されます (ディレクトリ名を指定すると、その下のすべてのファイルの差分が得られます)。

Raw 出力形式

git-diff-indexgit-diff-treegit-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. ステータス。オプションの "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: 「不明な」変更タイプ (おそらくバグ、報告してください)

ステータス文字 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 の場合、各親のパス名に続いてマージコミットのパス名が表示されます。

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

すべての差分生成コマンドは、マージを表示する際に -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. -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> の差分で動作するように設計されており、結合差分形式では使用されません。

  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)個の@文字があります。

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

カラム 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	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 diff            (1)
$ git diff --cached   (2)
$ git diff HEAD       (3)
$ git diff AUTO_MERGE (4)
  1. 次のコミットのためにまだステージングされていない作業ツリーの変更。

  2. インデックスと最後のコミット間の変更。 -a オプションなしで git commit を実行した場合にコミットされる内容。

  3. 最後のコミット以降、作業ツリーで行った変更。git commit -a を実行した場合にコミットされる内容

  4. これまでテキストの競合を解決するために作業ツリーで行った変更。

任意のコミットと比較する
$ git diff test            (1)
$ git diff HEAD -- ./test  (2)
$ git diff HEAD^ HEAD      (3)
  1. 現在のブランチの先端を使用する代わりに、「test」ブランチの先端と比較します。

  2. 「test」ブランチの先端と比較する代わりに、現在のブランチの先端と比較しますが、比較をファイル「test」に限定します。

  3. 最後のコミットの前のバージョンと最後のコミットを比較します。

ブランチを比較する
$ git diff topic master    (1)
$ git diff topic..master   (2)
$ git diff topic...master  (3)
  1. トピックブランチとマスターブランチの先端間の変更。

  2. 上記と同じです。

  3. トピックブランチがマスターブランチから分岐して以来、マスターブランチで発生した変更。

差分出力の制限
$ git diff --diff-filter=MRC            (1)
$ git diff --name-status                (2)
$ git diff arch/i386 include/asm-i386   (3)
  1. 変更、名前変更、コピーのみを表示し、追加または削除は表示しません。

  2. 名前と変更の種類のみを表示し、実際の差分出力は表示しません。

  3. 差分出力を指定されたサブツリーに限定します。

差分出力の加工
$ git diff --find-copies-harder -B -C  (1)
$ git diff -R                          (2)
  1. 名前変更、コピー、完全な書き換えを検出するためにより多くのサイクルを費やします (非常に高価です)。

  2. 差分を逆順に出力します。

設定

このセクションのこの行より下のすべての内容は、git-config[1] ドキュメントから選択的に含まれています。内容はそちらで見られるものと同じです。

diff.autoRefreshIndex

git diff を使用して作業ツリーファイルと比較する場合、stat-only の変更は変更と見なしません。代わりに、git update-index --refresh をサイレントに実行して、作業ツリー内のコンテンツがインデックス内のコンテンツと一致するパスのキャッシュされた stat 情報を更新します。このオプションはデフォルトで true です。これは git diff Porcelain にのみ影響し、git diff-files などの下位レベルの diff コマンドには影響しないことに注意してください。

diff.dirstat

git diff などの --dirstat オプションのデフォルト動作を指定する、コンマ区切りの --dirstat パラメータのリスト。デフォルトはコマンドラインで上書きできます (--dirstat=<param>,... を使用)。フォールバックのデフォルト ( diff.dirstat で変更されていない場合) は changes,noncumulative,3 です。以下のパラメータが利用可能です。

changes

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

lines

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

files

変更されたファイルの数をカウントして dirstat 数を計算します。dirstat 分析では、変更された各ファイルが等しくカウントされます。これは、ファイルの内容をまったく参照する必要がないため、計算コストが最も低い --dirstat 動作です。

cumulative

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

<limit>

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

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

diff.statNameWidth

--stat 出力におけるファイル名部分の幅を制限します。設定されている場合、format-patch を除く、--stat 出力を生成するすべてのコマンドに適用されます。

diff.statGraphWidth

--stat 出力におけるグラフ部分の幅を制限します。設定されている場合、format-patch を除く、--stat 出力を生成するすべてのコマンドに適用されます。

diff.context

デフォルトの3行ではなく、<n> 行のコンテキストで差分を生成します。この値は -U オプションによって上書きされます。

diff.interHunkContext

差分ハンク間のコンテキストを指定された行数まで表示し、互いに近いハンクを結合します。この値は --inter-hunk-context コマンドラインオプションのデフォルトとして機能します。

diff.external

この設定変数が設定されている場合、差分生成は内部差分機構ではなく、指定されたコマンドを使用して実行されます。GIT_EXTERNAL_DIFF 環境変数で上書きできます。このコマンドは git[1] の「git Diff」に記述されているパラメータで呼び出されます。注: 一部のファイルに対してのみ外部差分プログラムを使用したい場合は、代わりに gitattributes[5] を使用するとよいでしょう。

diff.trustExitCode

このブール値が true に設定されている場合、diff.external コマンドは、入力ファイルが等しいと見なす場合は終了コード0を、異なる場合は終了コード1を返すことが期待されます。これは diff(1) と同様です。デフォルトである false に設定されている場合、コマンドは等しいかどうかに関わらず終了コード 0 を返すことが期待されます。その他の終了コードは Git に致命的なエラーを報告させます。

diff.ignoreSubmodules

--ignore-submodules のデフォルト値を設定します。これは git diff Porcelain にのみ影響し、git diff-files などの下位レベルの diff コマンドには影響しないことに注意してください。git checkout および git switch も、未コミットの変更を報告する際にこの設定を尊重します。all に設定すると、通常 status.submoduleSummary が設定されている場合に git commit および git status によって表示されるサブモジュールサマリーが無効になりますが、--ignore-submodules コマンドラインオプションで上書きされない限り。git submodule コマンドはこの設定の影響を受けません。デフォルトでは、追跡されていないサブモジュールが無視されるように untracked に設定されています。

diff.mnemonicPrefix

設定されている場合、git diff は比較対象に応じて標準の a/b/ とは異なるプレフィックスペアを使用します。この設定が有効な場合、逆差分出力もプレフィックスの順序を入れ替えます。

git diff

(i)ndex と (w)ork tree を比較します。

git diff HEAD

(c)ommit と (w)ork tree を比較します。

git diff --cached

(c)ommit と (i)ndex を比較します。

git diff HEAD:<file1> <file2>

(o)bject と (w)ork tree のエンティティを比較します。

git diff --no-index <a> <b>

2つの非Git要素 <a><b> を比較します。

diff.noPrefix

設定されている場合、git diff はソースまたは宛先のプレフィックスを表示しません。

diff.srcPrefix

設定されている場合、git diff はこのソースプレフィックスを使用します。デフォルトは a/ です。

diff.dstPrefix

設定されている場合、git diff はこの宛先プレフィックスを使用します。デフォルトは b/ です。

diff.relative

true に設定すると、git diff はディレクトリ外の変更を表示せず、カレントディレクトリからの相対パス名を表示します。

diff.orderFile

差分内のファイルの順序を指定するファイル。-O オプションを参照してください。diff.orderFile が相対パス名の場合、作業ツリーのトップからの相対パスとして扱われます。

diff.renameLimit

コピー/名前変更検出の網羅的な部分で考慮するファイルの数。git diff オプション -l と同等です。設定されていない場合、現在のデフォルト値は1000です。名前変更検出が無効になっている場合、この設定は効果がありません。

diff.renames

Git が名前変更を検出するかどうか、およびその方法。false に設定すると、名前変更検出は無効になります。true に設定すると、基本的な名前変更検出が有効になります。copies または copy に設定すると、Git はコピーも検出します。デフォルトは true です。これは git-diff[1]git-log[1] のような git diff Porcelain にのみ影響し、git-diff-files[1] のような下位レベルのコマンドには影響しないことに注意してください。

diff.suppressBlankEmpty

空の出力行の前にスペースを出力する標準動作を抑制するためのブール値です。デフォルトは false です。

diff.submodule

サブモジュールの差分を表示するフォーマットを指定します。short フォーマットは、範囲の開始と終了のコミット名のみを表示します。log フォーマットは、git-submodule[1] summary と同様に範囲内のコミットをリストします。diff フォーマットは、サブモジュールの変更内容のインライン差分を表示します。デフォルトは short です。

diff.wordRegex

単語単位の差分計算を実行する際に、「単語」を決定するために使用される POSIX 拡張正規表現。正規表現に一致する文字シーケンスは「単語」であり、他のすべての文字は無視できる空白です。

diff.<driver>.command

カスタム差分ドライバコマンド。詳細は gitattributes[5] を参照してください。

diff.<driver>.trustExitCode

このブール値が true に設定されている場合、diff.<driver>.command コマンドは、入力ファイルが等しいと判断した場合は終了コード 0 を、異なると判断した場合は 1 を返すことが期待されます(diff(1) と同様)。デフォルトである false に設定されている場合、コマンドは等しいかどうかに関わらず終了コード 0 を返すことが期待されます。その他の終了コードは、Git に致命的なエラーを報告させます。

diff.<driver>.xfuncname

差分ドライバが hunk ヘッダを認識するために使用する正規表現。組み込みのパターンも使用できます。詳細は gitattributes[5] を参照してください。

diff.<driver>.binary

このオプションを true に設定すると、差分ドライバはファイルをバイナリとして扱います。詳細は gitattributes[5] を参照してください。

diff.<driver>.textconv

差分ドライバがファイルのテキスト変換バージョンを生成するために呼び出すコマンド。変換の結果は、人間が読める差分を生成するために使用されます。詳細は gitattributes[5] を参照してください。

diff.<driver>.wordRegex

差分ドライバが行内の単語を分割するために使用する正規表現。詳細は gitattributes[5] を参照してください。

diff.<driver>.cachetextconv

このオプションを true に設定すると、差分ドライバはテキスト変換出力をキャッシュします。詳細は gitattributes[5] を参照してください。

diff.indentHeuristic

このオプションを false に設定すると、パッチを読みやすくするために差分 hunk の境界をシフトするデフォルトのヒューリスティックが無効になります。

diff.algorithm

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

default
myers

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

minimal

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

patience

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

histogram

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

diff.wsErrorHighlight

差分の contextoldnew 行の空白エラーを強調表示します。複数の値はカンマで区切られます。none は以前の値をリセットし、default はリストを new にリセットし、allold,new,context の略です。空白エラーは color.diff.whitespace で色付けされます。コマンドラインオプション --ws-error-highlight=<kind> はこの設定を上書きします。

diff.colorMoved

有効な <mode> または true の値に設定すると、差分内の移動した行が異なる色で表示されます。有効なモードの詳細は --color-moved を参照してください。単に true に設定すると、デフォルトの色モードが使用されます。false に設定すると、移動した行は色付けされません。

diff.colorMovedWS

diff.colorMoved 設定などを使用して移動した行が色付けされる場合、このオプションはスペースの扱い方を制御します。有効なモードの詳細は、git-diff[1]--color-moved-ws を参照してください。

GIT

git[1]スイートの一部

scroll-to-top