SYNOPSIS
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>
DESCRIPTION
作業ツリーとインデックスまたはツリー間の変更、インデックスとツリー間の変更、2つのツリー間の変更、マージによる変更、2つのBLOBオブジェクト間の変更、ディスク上の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
A
はgit
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
A
はgit
diff
$
(git
merge-base
A
HEAD
) と同等です。 -
git
diff
[<options>] [--merge-base
] <commit> <commit> [--
] [<path>...] -
これは、2つの任意の<commit>間の変更を表示するためのものです。
--merge-base
が指定されている場合は、「前」側(before side)の2つのコミットのマージベースを使用します。git
diff
--merge-base
A
B
はgit
diff
$
(git
merge-base
A
B
)B
と同等です。 -
git
diff
[<options>] <commit> <commit>...
<commit> [--
] [<path>...] -
この形式は、マージコミットの結果を表示するためのものです。 最初にリストされている<commit>は、マージ自体である必要があります。 必要なリビジョンの組を生成する便利な方法は、 接尾辞
^@
と^
! を使用することです。A
がマージ・コミットの場合、git
diff
A
A^@
とgit
diff
A^
! とgit
show
A
はすべて同一の、 結合された diff (combined diff)を返します。 -
git
diff
[<options>] <commit>..
<commit> [--
] [<path>...] -
これは、 2つの任意の <commit> 間の変更を表示するためのです。 上記の .. なしの形式と同義です。 片側の <commit> を省略すると、 代わりに HEAD を使用した場合と同じ効果があります。
-
git
diff
[<options>] <commit>...
<commit> [--
] [<path>...] -
この形式は、両方の<commit>の共通の祖先から開始して、2番目の<commit>を含むブランチの変更を表示するためのものです。
git
diff
A
...
B
はgit
diff
$
(git
merge-base
A
B
)B
と同等です。 <commit> のどちらかを省略でき、 そうすると、 代わりに HEAD を使用するのと同じ効果があります。
念のために書いておくと、 上記の説明の <commit> は、 --merge-base
の場合と .. 表記を使った最後の2つの形式を除いて、 すべて任意の <tree> にすることができます。 対象となるツリーは、 AUTO_MERGE
という名前の ref によって指されるツリーです。 これは、 マージ競合が発生したときに ort
マージ戦略によって書き込まれます(git-merge(1) 参照)。 作業ツリーと AUTO_MERGE
を比較すると、 テキストの競合を解決するためにこれまでに加えた変更が表示されます(下記例参照)。
<commit>を綴る方法のより完全なリストについては、 gitrevisions(7) の「SPECIFYING REVISIONS」セクションを参照してください。 ただし、 diff
は範囲ではなく2つの「エンドポイント」を比較することであり、その範囲表記(<commit>..
<commit> や <commit>...
<commit>)は、 gitrevisions(7) の「SPECIFYING RANGES」セクションで定義されている範囲を意味するものではありません。
-
git
diff
[<options>] <blob> <blob> -
この形式は、2つのBLOBオブジェクトの生のコンテンツの違いを表示するためのものです。
OPTIONS
-
-p
-
-u
-
--patch
-
パッチを生成します([generate_patch_text_with_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 format)でdiffを生成します。
-
--patch-with-raw
-
-p
--raw
の同義語。 -
--indent-heuristic
-
diffハンクの境界をずらす(shift)ヒューリスティックを有効にして、パッチを読みやすくします。 これがデフォルトです。
-
--no-indent-heuristic
-
インデントヒューリスティック(indent heuristic)を無効にします。
-
--minimal
-
より多くの時間を費やして、可能な限り最小のdiffが生成されるようにします。
-
--patience
-
"patience diff" アルゴリズムを使用してdiffを生成します。
-
--histogram
-
"histogram diff" アルゴリズムを使用してdiffを生成します。
-
--anchored=
<text> -
"anchored diff" アルゴリズムを使用してdiffを生成します。
このオプションは複数回指定できます。
行が比較元(source)と比較先(destination)の両方に存在し、かつ、1回だけ存在し、かつ、 <text> で始まる場合、このアルゴリズムは、その行が出力に削除または追加として表示されないようにします。内部で「patience diff」アルゴリズムを使用します。
-
--diff-algorithm=
(patience
|minimal
|histogram
|myers
) -
diffアルゴリズムを選択します。そのバリエーションは以下のとおりです:
-
default
-
myers
-
基本的な貪欲な差分アルゴリズム(greedy diff algorithm)。現在、これがデフォルトです。
-
minimal
-
より多くの時間を費やして、可能な限り最小のdiffが生成されるようにします。
-
patience
-
パッチを生成する時に "patience diff" アルゴリズムを使います。
-
histogram
-
このアルゴリズムは、忍耐アルゴリズム(patience algorithm)を拡張して、「発生率の低い共通要素をサポート」(support low-occurrence common elements)します。
たとえば、 あなたが
diff.algorithm
変数をデフォルト以外の値に設定した上で、それでもデフォルト値を使用する場合は、--diff-algorithm=default
オプションを使用する必要があります。 -
-
--stat
[=
<width>[,
<name-width>[,
<count>]]] -
diffstat を生成します。 デフォルトでは、 必要なだけのスペースがファイル名部分に使用され、 残りはグラフ部分に使用されます。 最大幅はデフォルトで端末幅、 または端末に接続されていない場合は 80 桁であり、 <width> で上書きできます。 ファイル名部分の幅は、 カンマの後に別の幅 <name-width> を指定するか、または
diff.statNameWidth=
<name-width> を設定することによって制限できます。 グラフ部分の幅は、--stat-graph-width=
<graph-width> を使用するか、 またはdiff.statGraphWidth=
<graph-width> を設定することによって制限できます。--stat
または--stat-graph-width
の使用は統計グラフを生成するすべてのコマンドに影響しますが、diff.statNameWidth
またはdiff.statGraphWidth
の設定はgit
format-patch
には影響しません。 3番目のパラメータ <count> を指定することにより、出力を最初の <count> 行に制限し、それに ... が続く形にできます。これらのパラメータは、
--stat-width=
<width> と--stat-name-width=
<name-width> と--stat-count=
<count> を使用して個別に設定することもできます。 -
--compact-summary
-
ファイルの作成や削除( "new" または "gone" 。オプションでシンボリックリンクの場合は
+l
)、 diffstat のモード変更(実行可能ビットを追加または削除する場合は、それぞれ+x
または-x
)など、 拡張ヘッダー情報の要約を出力します。 情報はファイル名部分とグラフ部分の間に置かれます。 本機能は--stat
の機能を含んでいます。 -
--numstat
-
--stat
に似ていますが、プログラムで処理しやすい(machine friendly)ように、追加および削除された行数を10進表記とパス名で省略形なしで表示します。バイナリファイルの場合、0
0
の代わりに2つの-
を出力します。 -
--shortstat
-
変更されたファイルの総数と、追加および削除された行の数を含む
--stat
形式の最後の行のみを出力します。 -
-X
[<param>,.
..] -
--dirstat
[=
<param>,.
..] -
各サブディレクトリの相対的な変更量の分布を出力します。
--dirstat
の動作は、パラメータのコンマ区切りリストを渡すことでカスタマイズできます。デフォルトは、diff.dirstat
構成変数によって制御されます(git-config(1) 参照)。以下のパラメータを使用できます:-
changes
-
比較元(source)から削除された、または比較先(destination)に追加された行をカウントして、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
[=
<param>,.
..] -
--dirstat=files,
<param>,.
.. と同義語。 -
--summary
-
作成、名前変更、モード変更などの拡張ヘッダー情報の短い要約(condensed summary)を出力します。
-
--patch-with-stat
-
-p
--stat
と同義語。 -
-z
-
--raw
または--numstat
または--name-only
または--name-status
が指定されている場合は パス名を変更せず、出力フィール・ターミネーターとしてNULLを使用してください。このオプションがないと、構成変数
core.quotePath
で説明されているように、 通常の文字以外(unusual characters)を含むパス名がクォートされます(git-config(1) 参照)。 -
--name-only
-
ポスト・イメージ・ツリー(post-image tree)に、 変更された各ファイルの名前のみを表示します。 多くの場合、ファイル名はUTF-8でエンコードされます。 詳細については、 git-log(1) のマニュアルページにあるエンコーディングに関する議論(the discussion about encoding)を参照してください。
-
--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を示します。configオプションが設定されていない場合、デフォルトはdiff.submodule
またはshort
形式です。 -
--color
[=
<when>] -
色付きのdiffを表示します。
--color
(つまり、=
<when> 無し) は--color=always
と同じです。 <when> は、 always または never または auto のいずれかになります。color.ui
とcolor.diff
構成設定で 変更できます。 -
--no-color
-
カラーdiffをオフにします。 これは、構成設定(configuration settings)を上書きするために使用できます。
--color=never
と同じです。 -
--color-moved
[=
<mode>] -
ソースコードの移動した行を別の色にします。 これは、
diff.colorMoved
構成設定によって変更できます。 <mode>は、オプションが指定されていない場合はデフォルトでno
になり、 モードが指定されていないオプションが指定されている場合はzebra
になります。 モードは以下のいずれかでなければなりません:-
no
-
移動行をハイライトしません。
-
default
-
zebra の同義語です。これは、将来、より賢明なモードに変更される可能性があります。
-
plain
-
ある場所で追加され、別の場所で削除された行は、
color.diff.newMoved
で色付けされます。 同様に、color.diff.oldMoved
は、差分の別の場所に追加された削除された行に使用されます。このモードは移動された行をピックアップしますが、コードのブロックが順列なしで移動されたかどうかを判断することはレビューではあまり役に立ちません。 -
blocks
-
少なくとも20文字の英数字の移動テキストのブロックが貪欲に検出されます。検出されたブロックは、
color.diff.
(old
|new
)Moved
で設定した色のいずれかを使用して色付けされます。隣接するブロックを区別することはできません。 -
zebra
-
移動されたテキストのブロックは、
blocks
モードの場合と同様に検出されます。 ブロックは、color.diff.
(old
|new
)Moved
で設定した色またはcolor.diff.
(old
|new
)MovedAlternative
で設定した色のいずれかを使用して色付けされます。 2つの色の間の変化は、新しいブロックが検出されたことを示します。 -
dimmed-zebra
-
zebra
に似ていますが、移動されたコードの重要でない部分の追加の調光(dimmed)が実行されます。隣接する2つのブロックの境界線は興味深いと見なされ、残りは興味深いものではありません。dimmed_zebra
は非推奨の同義語です。
-
-
--no-color-moved
-
移動検出をオフにします。 これは、構成設定を上書きするために使用できます。
--color-moved=no
と同じです。 -
--color-moved-ws=
<mode>,.
.. -
これは、
--color-moved
の移動検出を実行するときに空白を無視する方法を設定します。diff.colorMovedWS
構成設定で設定できます。 これらのモードは、コンマ区切りのリストとして指定できます:-
no
-
移動行検出を実行するときに、空白(whitespace)を無視しない。
-
ignore-space-at-eol
-
行末(EOL)での空白(whitespace)の変更を無視します。
-
ignore-space-change
-
空白(whitespace)の数の変更は無視してください。これは、行末の空白(whitespace)を無視し、1つ以上の空白文字(whitespace characters)の他のすべてのシーケンスを同等と見なします。
-
ignore-all-space
-
行を比較するときは空白(whitespace)を無視します。これにより、一方の行に空白があり、もう一方の行に空白がない場合でも、違いは無視されます。
-
allow-indentation-change
-
最初に移動検出で空白(whitespace)を無視し、空白(whitespace)の変更が行ごとに同じである場合にのみ、移動されたコードブロックをブロックにグループ化します。 これは他のモードと互換性がありません。
-
-
--no-color-moved-ws
-
移動検出を実行するときは、空白(whitespace)を無視しないでください。これは、構成設定を上書きするために使用できます。
--color-moved-ws=no
と同じです。 -
--word-diff
[=
<mode>] -
デフォルトでは、単語は空白(whitespace)で区切られます。 以下の
--word-diff-regex
を参照してください。 <mode> のデフォルトはplain
です。 <mode> は以下のいずれかである必要があります:-
color
-
変更された単語(word)を色のみを使用して強調表示します。
--color
を意味します。 -
plain
-
単語を
[-removed-]
や{
として表示します。 区切り文字が入力に表示されている場合、区切り文字をエスケープしようとしないため、出力があいまいになる可能性があります。added
} -
porcelain
-
スクリプトの使用を目的とした特別な行ベースの形式を使用します。追加/削除/無変更については、通常の統一されたdiff形式で印刷され、行の先頭の "+"/"-"/" " 文字で始まり、行の終わりまで続きます。入力の改行は、それ自体の行のチルダ
~
で表されます。 -
none
-
単語(word)のdiffを再度無効にします。
注意: 最初のモードの名前にもかかわらず、有効になっている場合、すべてのモードで変更された部分を強調するために色が使用されることに注意してください。
-
-
--word-diff-regex=
<regex> -
空白以外を単語と見なす代わりに、 <regex> を使用して単語が何であるかを決定します。また、すでに有効になっていない限り、この機能は
--word-diff
の機能を含んでいます。<regex> の重複しないマッチはすべて、単語と見なされます。これらのマッチの間のすべては空白と見なされ、違いを見つけるためとしては無視されます! 正規表現に |[
^
[:space:
]] を追加して、空白以外のすべての文字とマッチすることを確認することをお勧めします。改行を含むマッチは、改行で黙って切り捨てられます!たとえば、
--word-diff-regex=.
は各文字を単語として扱い、それに応じて文字ごとの違いを表示します。正規表現は、diffドライバーまたは構成オプション(configuration option)を介して設定することもできます。 gitattributes(5) または git-config(1) を参照してください。これを指定すると、diffドライバーまたは構成設定(configuration settings)が明示的にオーバーライドされます。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> -
diffの
context
またはold
またはnew
行の空白エラーを強調表示します。複数の値はコンマで区切られ、none
は前の値をリセットし、default
はリストをnew
にリセットし、all
は old、new、context の省略形です。このオプションが指定されておらず、構成変数diff.wsErrorHighlight
が設定されていない場合、new
行の空白エラーのみが強調表示されます。空白エラーはcolor.diff.whitespace
で色分けされています。 -
--full-index
-
パッチ形式の出力を生成するときは、最初の一握りの文字(first handful of characters)の代わりに、「インデックス」行にイメージ前およびイメージ後の完全ブロブオブジェクト名を表示します。
-
--binary
-
--full-index
に加えて、git-apply
で適用できるバイナリ差分を出力します。--patch
の機能を含んでいます。 -
--abbrev
[=
<n>] -
完全な40バイトの16進オブジェクト名をdiff-raw形式の出力とdiff-treeヘッダー行に表示する代わりに、オブジェクトを一意に参照する、少なくとも <n> 桁の16進数の長さの最短のプレフィックスを表示します。diffパッチ出力形式では、
--full-index
が優先されます。つまり、--full-index
が指定されている場合、--abbrev
に関係なく、完全なブロブ名が表示されます。デフォルト以外の桁数は、--abbrev=
<n> で指定できます。 -
-B
[<n>][/
<m>] -
--break-rewrites
[=
[<n>][/
<m>]] -
完全な書き換えの変更を削除と作成のペアに分割します。これには以下の2つの目的があります:
これは、ファイルの完全な書き換えに相当する変更が、コンテキストとしてテキストで一致する非常に少数の行と混合された一連の削除と挿入としてではなく、古いものすべての単一の削除とそれに続く すべての新しいものを1回挿入し、数値
m
が -B オプションのこの側面を制御します(デフォルトは60%)。-B/70
% は、Gitがそれを完全な書き換えと見なすために、元の30%未満が結果に残る必要があることを指定します(つまり、結果のパッチは、コンテキスト行と混合された一連の削除と挿入になります)。-M と一緒に使用すると、完全に書き換えられたファイルも名前変更のソースと見なされ(通常、 -M は、消えたファイルのみを名前変更のソースと見なします)、数
n
が -Bオプションのこの側面を制御します(デフォルトは50%)。-B20
% は、ファイルのサイズの20%以上と比較して、追加および削除を伴う変更が、別のファイルへの名前変更の可能なソースとして取得される資格があることを指定します。 -
-M
[<n>] -
--find-renames
[=
<n>] -
名前の変更(renames)を検知する。
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
オプションは、コピーの元のファイルが同じ変更組(changeset)で変更された場合にのみコピーを検索します。このフラグにより、コマンドは変更されていないファイルをコピー元の候補として検査します。これは大規模なプロジェクトでは非常にコストのかかる操作であるため、注意して使用してください。 複数の-C
オプションを指定しても同じ効果があります。 -
-D
-
--irreversible-delete
-
削除するプレイメージ(preimage)を省略します。つまり、ヘッダーのみを出力し、プレイメージと
/dev/null
の差分は出力しません。結果のパッチは、patch
またはgit
apply
で適用されることを意図していません。これは、変更後にテキストを確認することに集中したい人のためだけのものです。さらに、出力には明らかに、そのようなパッチを手動でも逆に適用するのに十分な情報が不足しているため、このようなオプション名になっています。-B
と併用する場合は、削除/作成ペアの削除部分のプリイメージ(preimage)も省略します。 -
-l
<num> -
-M
および-C
オプションには、名前変更/コピーのサブセットを安価に検出できるいくつかの準備手順が含まれ、その後に、残りのすべてのペアになっていない比較先(destinations)をすべての関連ソースと比較する徹底的なフォールバック部分が続きます。(名前の変更の場合、残りのペアになっていないソースのみが関係します。コピーの場合、すべての元のソースが関係します)。N個の、ソースと比較先の場合、この徹底的なチェックのコストは O(N^2) です。このオプションは、関係するソース/比較先ファイルの数が指定された数を超えた場合に、名前変更/コピー検出の完全な部分が実行されないようにします。デフォルトは diff.renameLimit です。 値0は無制限として扱われることに注意してください。 -
--diff-filter=
[(A
|C
|D
|M
|R
|T
|U
|X
|B
)...
[*]] -
追加(Add)・コピー(Copy)・削除(Delete)・変更(Modify)・名前変更(Rename)されたファイル、タイプが変更されたファイル(T)、マージされていないファイル(U)、不明なファイル(X)、またはペアリングが壊れているファイル(B)のみを選択します。フィルタ文字(無しも含む)の任意の組み合わせを使用できます。 組み合わせに * (全てまたは無し)が追加されると、比較で他の基準に一致するファイルがある場合、すべてのパスが選択されます。 他の基準に一致するファイルがない場合、何も選択されません。
また、逆に、除外したい時はこれらの各大文字指定を小文字にして指定します。例えば
--diff-filter=ad
は、追加および削除されたパスを除外します。注意:すべての diff がすべてのタイプを含むわけではないことに注意してください。 例えば、 コピーされたエントリや名前が変更されたエントリは、それらのタイプの検出(detection)が無効になっている場合には表示されません。
-
-S
<string> -
ファイル内の指定の <string> (つまり、 addition 、deletion)の出現回数の差分を調べます。 スクリプトで使用することを目的としています。
(構造体など)コードの正確なブロックを探していて、そのブロックが最初に作成されてからの履歴を知りたい場合に便利です。この機能を繰り返し使用して、プリイメージ(preimage)内の興味深いブロックを
-S
にフィードバックし、そしてあなたはそれをブロックの最初のバージョンを取得するまで続けます。バイナリファイルも検索されます。
-
-G
<regex> -
パッチテキストに <regex> にマッチする 追加/削除 された行が含まれている差分を探します。
-S
<regex>--pickaxe-regex
と-G
<regex> の違いを説明するために、同じファイル内で以下のdiffを使用してコミットすることを検討してください:+ 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> の変更を含むファイルだけでなく、その変更セット(changeset)のすべての変更を表示します。 -
--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
-
比較を行うときは、行末のキャリッジリターン(carriage-return)を無視します。
-
--ignore-space-at-eol
-
行末(EOL)での空白(whitespace)の変更を無視します。
-
-b
-
--ignore-space-change
-
空白(whitespace)の数の変更は無視してください。これは、行末の空白(whitespace)を無視し、1つ以上の空白文字(whitespace characters)の他のすべてのシーケンスを同等と見なします。
-
-w
-
--ignore-all-space
-
行を比較するときは空白を無視します。 これにより、一方の行に空白があり、もう一方の行に空白がない場合でも、違いは無視されます。
-
--ignore-blank-lines
-
全て空白の行の変更は無視します。
-
-I
<regex> -
--ignore-matching-lines=
<regex> -
すべての行が <regex> にマッチする変更を無視します。このオプションは複数回指定できます。
-
--inter-hunk-context=
<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
を含んでいます。 終了コード(exit code)が信頼できない、 つまり、 構成オプションdiff.trustExitCode
またはdiff.
<driver>.trustExitCode
または 環境変数GIT_EXTERNAL_DIFF_TRUST_EXIT_CODE
のいずれかが false の場合、 外部 diff ヘルパーの実行を無効にします。 -
--ext-diff
-
外部diffヘルパーの実行を許可します。 gitattributes(5) を使用して外部diffドライバーを設定する場合は、 git-log(1) およびその仲間と一緒にこのオプションを使用する必要があります。
-
--no-ext-diff
-
外部diffドライバーを禁止します。
-
--textconv
-
--no-textconv
-
バイナリファイルを比較するときに、外部テキスト変換フィルターの実行を許可(または禁止)します。 詳細については、 gitattributes(5) を参照してください。textconvフィルターは通常、一方向の変換であるため、結果のdiffは人間の消費に適していますが、適用(apply)することはできません。このため、textconvフィルターは、 git-diff(1) および git-log(1) に対してのみデフォルトで有効になりますが、 git-format-patch(1) またはdiff配管コマンドに対しては有効になりません。
-
--ignore-submodules
[=
(none
|untracked
|dirty
|all
)] -
diff 生成時にサブモジュールへの変更を無視します。
all
がデフォルトです。none
を使用すると、追跡されていないファイルまたは変更されたファイルが含まれている場合、またはそのHEADがスーパープロジェクトに記録されているコミットと異なる場合にサブモジュールが変更されたと見なされ、 git-config(1) または gitmodules(5) のignore
オプションの設定をオーバーライドするために使用できます。untracked
が使用されている場合、サブモジュールには追跡されていないコンテンツのみが含まれている場合、サブモジュールはダーティとは見なされません(ただし、変更されたコンテンツはスキャンされます)。dirty
を使用すると、サブモジュールの作業ツリーへのすべての変更が無視され、スーパープロジェクトに格納されているコミットへの変更のみが表示されます(これは1.7.0までの動作でした)。all
を使用すると、サブモジュールへのすべての変更が非表示になります。 -
--src-prefix=
<prefix> -
"a/" の代わりに、指定した比較元プレフィックス(source <prefix>)を表示します。
-
--dst-prefix=
<prefix> -
"b/" の代わりに、指定した比較先プレフィックス(destination <prefix>)を表示します。
-
--no-prefix
-
比較元(source)または比較先(destination)のプレフィックスを表示しません。
-
--default-prefix
-
デフォルトの比較元(source)および比較先(destination)のプレフィックスを使用します("a/" と "b/")。 これは、
diff.noprefix
やdiff.srcPrefix
やdiff.dstPrefix
やdiff.mnemonicPrefix
などの設定をオーバーライドします(git-config(1) 参照)。 -
--line-prefix=
<prefix> -
出力のすべての行に追加のプレフィックス(<prefix>)を付加します。
-
--ita-invisible-in-index
-
デフォルトでは、
git
add
-N
によって追加されたエントリは、git
diff
に既存の空のファイルとして表示され、git
diff
--cached
に新しいファイルとして表示されます。このオプションを使用すると、エントリはgit
diff
では新しいファイルとして表示され、git
diff
--cached
では存在しません。このオプションは、--ita-visible-in-index
で元に戻すことができます。どちらのオプションも実験的なものであり、将来削除される可能性があります。
これらの一般的なオプションの詳細については、 gitdiffcore(7) も参照してください。
-
-1
-
--base
-
-2
-
--ours
-
-3
-
--theirs
-
作業ツリーと以下を比較します
-
-1
または--base
の場合、 「ベース」バージョン(ステージ #1)と比較します -
-2
または--ours
の場合、「our ブランチ」(ステージ #2)と比較します -
-3
または--theirs
の場合「their ブランチ」(ステージ #3)と比較します
インデックスには、マージされていないエントリの場合、つまり競合を解決している場合にのみ、これらのステージが含まれます。 詳細については、 git-read-tree(1) の「3-Way Merge」セクションを参照してください。
-
-
-0
-
マージされていないエントリのdiff出力を省略し、「Unmerged」とだけ表示します。 作業ツリーをインデックスと比較する場合にのみ使用できます。
- <path>...
-
<paths>パラメータを指定すると、diffを名前付きパスに制限するために使用されます(あなたはディレクトリ名を指定して、その下にあるすべてのファイルのdiffを取得できます)。
Raw output format
git-diff-index
と git-diff-tree
と git-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
つまり、左から右へ:
-
コロン(:)
-
"src" のモード。作成(creation)またはマージされていない(unmerged)場合は 000000
-
空白
-
"dst" のモード。作成(creation)またはマージされていない(unmerged)場合は 000000
-
空白
-
"src" のsha1。作成(creation)またはマージされていない(unmerged)場合は 0{40}
-
空白
-
"dst" のsha1; 削除、またはマージされていない(unmerged)、または「ワーク・ツリーがインデックスと同期していない」場合は 0{40}
-
空白
-
ステータスの後に、オプションの「スコア数」("score" number)が続きます
-
-z
オプションが使用されている場合はタブまたはNUL -
"src" のパス
-
-z
オプションが使用されている場合タブまたはNUL。ステータスCまたはRにのみ存在します -
"dst" のパス。ステータスCまたはRにのみ存在します
-
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
で説明されているように、通常の文字以外(unusual characters)を含むパス名が引用符で囲まれます(git-config(1) 参照)。 -z
を使用すると、ファイル名がそのまま出力され、行はNULバイトで終了します。
diff format for merges
git-diff-tree
と git-diff-files
と git-diff
--raw
は、 -c
または --cc
オプションを使用して、マージコミットに対してもdiff出力を生成できます。出力は、以下の点で上記の形式とは異なります:
-
親ごとにコロン(:)があります
-
より多くの "src" モードと "src" sha1があります
-
statusは、各親のステータス文字を連結したものです
-
オプションの「スコア数」はありません
-
ファイルのタブ区切りのパス名
-c
および ` -cc` の場合、履歴のいずれかの側でファイルの名前が変更された場合でも、宛先(dst)または最終パスのみが表示されます。 --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
注意: combined
diff
は、すべての親から変更されたファイルのみをリストすることに注意してください。
Generating patch text with -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形式とは少々異なります:
-
先行して、以下のような
git
diff
ヘッダーがあります:diff --git a/file1 b/file2
名前の変更/コピーが含まれない限り、
a/
とb/
のファイル名は同じです。 特に、作成または削除の場合でも、a/
またはb/
ファイル名の代わりに/dev/null
が使用されることはありません。名前変更/コピー が含まれる場合、
file1
とfile2
は、それぞれ 名前変更/コピー のソース・ファイルの名前と、 名前変更/コピー が生成するファイルの名前を示します。 -
その後に、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/
プレフィックスは含まれません。類似インデックス(similarity index)は変更されていない行のパーセンテージであり、非類似インデックス(dissimilarity index)は変更された行のパーセンテージです。これは切り捨てられた整数であり、その後にパーセント記号が続きます。したがって、100%の類似インデックス値は2つの等しいファイルを表し、100%の非類似性は古いファイルから新しいファイルに移行された行がないことを意味します。
インデックス行には、変更前後のブロブオブジェクト名が含まれます。 <mode> は、ファイルモードが変更されない場合に含まれます。それ以外の場合、別々の行は古いモードと新しいモードを示します。
-
通常の文字でないキャラクタ("unusual" characters)を含むパス名は、構成変数
core.quotePath
で説明されているようにクォートされています( git-config(1)参照)。 -
出力内のすべての
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
-
ハンク・ヘッダーには、 ハンクが適用される関数の名前が記載されています。 これを特定のプログラミング言語に合わせて調整する方法の詳細については、 gitattributes(5) の「Defining a custom hunk-header」(カスタム・ハンク・ヘッダーの定義)を参照してください。
Combined diff format
diffを生成するコマンドは、マージを表示するときに -c
または --cc
オプションを使用して「合成diff」(combined diff)を生成できます。これは 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);
-
git
diff
ヘッダーがその前にあり、 以下のようになっています(-c
オプションが使用されている場合):diff --combined file
または、以下のようになります(
--cc
オプションが使用されている場合):diff --cc file
-
その後に1つ以上の拡張ヘッダー行が続きます(以下の例は、2つの親とのマージを示しています):
index <hash>,<hash>..<hash> mode <mode>,<mode>`..`<mode> new file mode <mode> deleted file mode <mode>,<mode>
mode
<mode>,
<mode>..
<mode> 行は、 <mode> の少なくとも1つが他の <mode> と異なる場合にのみ表示されます。 検出されたコンテンツの移動(名前の変更とコピーの検出)に関する情報を含む拡張ヘッダーは、 2つの <tree-ish> の diff で機能するように設計されており、 合成 diff 形式では使用されません。 -
その後に2行の from-file/to-file ヘッダーが続きます:
--- a/file +++ b/file
従来の統一 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
この拡張形式は、名前変更またはコピー検出がアクティブな場合に役立ち、別の親のファイルの元の名前を確認できます。
-
チャンクヘッダーの形式が変更され、誤って
patch-p1
にフィードされるのを防ぎます。合成差分形式は、マージコミットの変更を確認するために作成されたものであり、適用されることを意図したものではありません。この変更は、拡張された「インデックス」ヘッダーの変更に似ています:@@@ <from-file-range> <from-file-range> <to-file-range> @@@
合成diff形式のチャンクヘッダーには親の数+1の
@
文字があります。
従来の統一diff形式とは異なり、2つのファイルAとBが、 -
(マイナス:Aに表示されますが、Bでは削除されます) または +
(プラス:Aにはありませんが、Bには追加されます)、または " " (スペース:変更なし)なプレフィックスを持つ単一の列で表示される場合、この形式は2つ以上のファイル file1, file2,… を1つのファイルXと比較し、Xが各 fileN とどのように異なるかを示します。ファイルNごとに1つの列が出力行の前に追加され、Xの行が出力行とどのように異なるかを示します。
列Nの -
文字は、その行が fileN に表示されているが、結果には表示されていないことを意味します。 列Nの +
文字は、結果に行が表示され、 fileN にその行がないことを意味します(つまり、その親の観点から見て行が追加されたことを示す)。
上記の出力例では、関数のシグネチャが両方のファイルから見て変更されています(したがって、 file1 と file2 の両方から2つの -
が削除され、さらに ++
が追加されたため、 file1 と file2 のどちらにも表示されません)。また、他の8行は file1 と同じですが、 file2 には表示されません(したがって、接頭辞として +
が付けられます)。
git
diff-tree
-c
で表示される場合、マージコミットの親をマージ結果と比較します(つまり、 file1..fileN が親です)。 git
diff-files
-c
で表示される場合、2つの未解決のマージ親を作業ツリーファイルと比較します(つまり、 file1 はステージ2、別名「私たちのバージョン」、 file2 はステージ3、別名「彼らのバージョン」です)。
other diff formats
--summary
オプションは、新しく追加、削除、名前変更、およびコピーされたファイルを説明します。--stat
オプションは、 diffstat(1) グラフ を出力に追加します。これらのオプションは、 -p
などの他のオプションと組み合わせることができ、人間が読むことを目的としています。
名前の変更またはコピーを伴う変更を表示する場合、 --stat
出力は、パス名の共通のプレフィックスとサフィックスを組み合わせることにより、パス名をコンパクトにフォーマットします。 たとえば、4行を変更(modify)しながら arch/i386/Makefile
を arch/x86/Makefile
に移動(move)する変更(change)は、次のように表示されます:
arch/{i386 => x86}/Makefile | 4 +--
--numstat
オプションは diffstat(1) 情報を提供しますが、人間ではなくソフトウェアで読むのを容易にするように設計されています。 --numstat
出力のエントリは以下のようになります:
1 2 README
3 1 arch/{i386 => x86}/Makefile
この形式は、左から右へ:
-
追加行数
-
タブ
-
削除行数
-
タブ
-
パス名(おそらく rename/copy 情報を含む)
-
改行
-z
出力オプションが有効な場合、出力は以下のようにフォーマットされます:
1 2 README NUL
3 1 NUL arch/i386/Makefile NUL arch/x86/Makefile NUL
これは:
-
追加行数
-
タブ
-
削除行数
-
タブ
-
NUL(rename/copy された場合のみ存在します)
-
プリイメージのパス名
-
NUL(rename/copy された場合のみ存在します)
-
ポストイメージのパス名(rename/copy された場合のみ存在します)
-
NUL
名前が変更された場合のプリイメージパスの前の追加の NUL
は、出力を読み取るスクリプトが、先読みせずに、読み取られている現在のレコードがシングルパスレコードであるか、名前変更/コピーレコードであるか、を判断できるようにするためです。追加および削除された行を読み取った後、 NUL
まで読み取るとパス名が生成されますが、それが NUL
の場合、レコードには2つのパスが表示されます。
EXAMPLES
- あなたの作業ツリーを確認するさまざまな方法
-
$ git diff <1> $ git diff --cached <2> $ git diff HEAD <3> $ git diff AUTO_MERGE <4>
-
次のコミットのためにまだステージングされていない作業ツリーの変更。
-
インデックスと最後のコミットの間の変更。
-a
オプションなしでgit
commit
を実行した場合にコミットする内容です。 -
最後のコミット以降の作業ツリーの変更。
git
commit
-a
を実行した場合にコミットする内容です。 -
作業ツリーで、 これまでにテキストの競合を解決するために行った変更。
-
- 任意のコミット間の比較
-
$ git diff test <1> $ git diff HEAD -- ./test <2> $ git diff HEAD^ HEAD <3>
-
現在のブランチの先端を使用する代わりに、「テスト」ブランチの先端と比較してください。
-
「test」ブランチの先端と比較する代わりに、現在のブランチの先端と比較しますが、比較をファイル「test」に限定します。
-
最後のコミットと、最後のコミットのその前のバージョンを比較します。
-
- ブランチ間の比較
-
$ git diff topic master <1> $ git diff topic..master <2> $ git diff topic...master <3>
-
topicの先端とmasterブランチの間の変更。
-
同上。
-
topicブランチが開始されてからmasterブランチで発生した変更。
-
- diff 出力の制限
-
$ git diff --diff-filter=MRC <1> $ git diff --name-status <2> $ git diff arch/i386 include/asm-i386 <3>
-
変更、名前変更、コピーのみを表示し、追加や削除は表示しません。
-
名前と変更の性質のみを表示し、実際の差分出力は表示しません。
-
diff出力を名前付きサブツリーに制限します。
-
- diff出力をこねくりまわす(muging)
-
$ git diff --find-copies-harder -B -C <1> $ git diff -R <2>
-
名前の変更、コピー、完全な書き換えを見つけるために余分なサイクルを費やします(非常に高価です)。
-
逆のdiffを出力します。
-
CONFIGURATION
このセクションの以下のすべては、 git-config(1) ドキュメントの抜粋です。 内容は git-config(1) ドキュメント にあるものと同一です:
-
diff.autoRefreshIndex
-
git diff を使用して作業ツリーファイルと比較する場合、統計のみの変更を変更されたものと見なさない。代わりに、サイレントに
git
update-index
--refresh
を実行して、ワークツリーの内容がインデックスの内容と一致するパスの、キャッシュされた統計情報を更新します。このオプションのデフォルトはtrueです。注意: これはgit
diff
磁器コマンドにのみ影響し、git
diff-files
などの下位レベルのdiffコマンドには影響しないことに注意してください。 -
diff.dirstat
-
git
diff
や、 そのファミリーに対する--dirstat
オプションの デフォルトの動作を指定する、--dirstat
パラメータのカンマ区切りのリスト。 デフォルトは(--dirstat=
<param>,.
.. を使用して) コマンドラインでオーバーライドできます。 フォールバックのデフォルトはchanges,noncumulative,3
です(diff.dirstat
によって変更されていない限り)。 以下のパラメータを使用できます:-
changes
-
ソースから削除された、または宛先に追加された行をカウントして、dirstat数を計算します。これは、ファイル内の純粋なコード移動の量を無視します。つまり、ファイル内の行の再配置は、他の変更ほどカウントされません。これは、パラメーターが指定されていない場合のデフォルトの動作です。
-
lines
-
通常の行ベースのdiff分析を実行し、削除/追加 された行数を合計して、dirstat数を計算します。(バイナリファイルの場合、バイナリファイルには行の自然な概念がないため、代わりに64バイトのチャンクをカウントします)。 これは
changes
動作よりもコストのかかる--dirstat
動作ですが、他の変更と同じようにファイル内の再配置された行をカウントします。 結果の出力は、他の--
*stat オプションから得られるものと一致しています。 -
files
-
変更されたファイルの数を数えて、dirstat数を計算します。変更された各ファイルは、dirstat分析で等しくカウントされます。これは、ファイルの内容をまったく調べる必要がないため、計算コストが最も安価な
--dirstat
の動作です。 -
cumulative
-
親ディレクトリの子ディレクトリの変更もカウントします。
cumulative
を使用する場合、報告されるパーセンテージの合計が100%を超える場合があることに注意してください。 デフォルトの(非累積的な)動作は、non-cumulative
パラメーターで指定できます。 - <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
-
指定された行数までのdiffハンク間のコンテキストを表示し、それによって互いに近いハンクを融合します。この値は、
--inter-hunk-context
コマンドラインオプションのデフォルトとして機能します。 -
diff.external
-
この構成変数が設定されている場合、diffの生成は、内部のdiff機構を使用して実行されるのではなく、指定されたコマンドを使用して実行されます。 ‘GIT_EXTERNAL_DIFF’ 環境変数でオーバーライドできます。このコマンドは、 git(1) の「git Diffs」で説明されているパラメーターを使用して呼び出されます。 注意: ファイルのサブセットでのみ外部diffプログラムを使用する場合は、代わりに gitattributes(5) を使用することをお勧めします。
-
diff.trustExitCode
-
このブール値が
true
に設定されている場合、diff.external
コマンドは、 diff(1) のように、 入力ファイル達が等しいとみなされる場合は終了コード 0 を返し、 異なるとみなされる場合は 1 を返すことが期待されます。 これがデフォルトであるfalse
に設定されている場合、 コマンドは入力ファイル達が等しいかどうかに関係なく終了コード0
を返すことが期待されます。 これら以外終了コードがあると Git は致命的なエラー(fatal error)を報告します。 -
diff.ignoreSubmodules
-
--ignore-submodules
のデフォルト値を設定します。これはgit
diff
磁器コマンドにのみ影響し、git
diff-files
などの下位レベルの diff コマンドには影響しないことに注意してください。git
checkout
やgit
switch
も、コミットされていない変更を報告するときにこの設定を尊重します。all
に設定すると、--ignore-submodules
コマンドラインオプションを使用してオーバーライドされない限り、status.submoduleSummary
が設定されている場合、通常はgit
commit
およびgit
status
で表示されるサブモジュールの概要が無効になります。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
-
diff 内でファイルを並べ替える方法を示すファイル。 詳細は
-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
磁器コマンドにのみ影響し、 git-diff-files(1) などの下位レベルのコマンドには影響しないことに注意してください。 -
diff.suppressBlankEmpty
-
空の出力行の前にスペースを印刷する標準的な動作を禁止するブール値。デフォルトは
false
です。 -
diff.submodule
-
サブモジュールの違いを表示する形式を指定します。
short
形式は、 範囲の最初と最後にコミットの名前を表示するだけです。log
形式は、 git-submodule(1) のsummary
のように範囲内のコミットをリストします。diff
形式は、 サブモジュールの変更された内容のインライン diff を示します。 デフォルトはshort
です。 -
diff.wordRegex
-
単語ごとの差の計算を実行するときに「単語」(word)とは何かを判別するために使用されるPOSIX拡張正規表現。正規表現に一致する文字シーケンスは「単語」(words)であり、他のすべての文字は*無視できる*空白(whitespace)です。
-
diff.
<driver>.command
-
カスタムdiffドライバーコマンド。詳細については gitattributes(5) を参照してください。
-
diff.
<driver>.trustExitCode
-
このブール値が
true
に設定されている場合、diff.
<driver>.command
コマンドは、 diff(1) のように、 入力ファイル達が等しいとみなされる場合は終了コード 0 を返し、 異なるとみなされる場合は 1 を返すことが期待されます。 これがデフォルトであるfalse
に設定されている場合、 コマンドは入力ファイル達が等しいかどうかに関係なく終了コード 0 を返すことが期待されます。 これら以外の終了コードがあると、 Git は致命的なエラー(fatal error)を報告します。 -
diff.
<driver>.xfuncname
-
diffドライバーがハンクヘッダーを認識するために使用する必要がある正規表現。内蔵パターンを使用することもできます。詳細については gitattributes(5) を参照してください。
-
diff.
<driver>.binary
-
このオプションを
true
に設定すると、 diff ドライバーはファイルをバイナリとして処理します。 詳細については gitattributes(5) を参照してください。 -
diff.
<driver>.textconv
-
ファイルのテキスト変換バージョンを生成するためにdiffドライバーが呼び出す必要のあるコマンド。変換の結果は、人間が読める形式のdiffを生成するために使用されます。詳細については gitattributes(5) を参照してください。
-
diff.
<driver>.wordRegex
-
diffドライバーが単語(words)を1行に分割するために使用する必要がある正規表現。詳細については gitattributes(5) を参照してください。
-
diff.
<driver>.cachetextconv
-
このオプションを
true
に設定すると、 diff ドライバーはテキスト変換出力をキャッシュするようになります。 詳細については gitattributes(5) を参照してください。-
araxis
-
Use Araxis Merge (requires a graphical session)
-
bc
-
Use Beyond Compare (requires a graphical session)
-
bc3
-
Use Beyond Compare (requires a graphical session)
-
bc4
-
Use Beyond Compare (requires a graphical session)
-
codecompare
-
Use Code Compare (requires a graphical session)
-
deltawalker
-
Use DeltaWalker (requires a graphical session)
-
diffmerge
-
Use DiffMerge (requires a graphical session)
-
diffuse
-
Use Diffuse (requires a graphical session)
-
ecmerge
-
Use ECMerge (requires a graphical session)
-
emerge
-
Use Emacs' Emerge
-
examdiff
-
Use ExamDiff Pro (requires a graphical session)
-
guiffy
-
Use Guiffy’s Diff Tool (requires a graphical session)
-
gvimdiff
-
Use gVim (requires a graphical session)
-
kdiff3
-
Use KDiff3 (requires a graphical session)
-
kompare
-
Use Kompare (requires a graphical session)
-
meld
-
Use Meld (requires a graphical session)
-
nvimdiff
-
Use Neovim
-
opendiff
-
Use FileMerge (requires a graphical session)
-
p4merge
-
Use HelixCore P4Merge (requires a graphical session)
-
smerge
-
Use Sublime Merge (requires a graphical session)
-
tkdiff
-
Use TkDiff (requires a graphical session)
-
vimdiff
-
Use Vim
-
vscode
-
Use Visual Studio Code (requires a graphical session)
-
winmerge
-
Use WinMerge (requires a graphical session)
-
xxdiff
-
Use xxdiff (requires a graphical session)
-
-
diff.indentHeuristic
-
このオプションを
false
に設定すると、パッチを読みやすくするためにdiffハンク境界をシフトするデフォルトのヒューリスティックが無効になります。 -
diff.algorithm
-
diffアルゴリズムを選択します。 派生形は以下のとおりです:
-
default
-
myers
-
基本的な貪欲な差分アルゴリズム。現在、これがデフォルトです。
-
minimal
-
より多くの時間を費やして。可能な限り最小の差分が生成されるようにします。
-
patience
-
パッチを生成するときは、patience diff(忍耐差分)アルゴリズムを使用してください。
-
histogram
-
このアルゴリズムは、忍耐アルゴリズムを拡張して、「発生頻度の低い共通要素をサポート」(support low-occurrence common elements)します。
-
-
diff.wsErrorHighlight
-
差分の
context
またはold
または `new 行の空白エラー(whitespace errors)を強調表示します。複数の値はコンマで区切られ、none
は前の値をリセットし、default
はリストをnew
にリセットし、all
はold,new,context
の省略形です。空白のエラー(whitespace errors)はcolor.diff.whitespace
で色分けされています。コマンドラインオプション--ws-error-highlight=
<kind> はこの設定を上書きします。 -
diff.colorMoved
-
有効な <mode> または
true
値に設定すると、 差分内の移動された行は異なる色で表示されます。 有効なモードの詳細については、--color-moved
を参照してください。 単純にtrue
に設定すると、 デフォルトのカラー・モード が使用されます。false
に設定すると、 移動した行には色が付きません。 -
diff.colorMovedWS
-
このオプションは、 例えば
diff.colorMoved
設定を使用して、 移動した行に色を付ける場合、 空白(spaces)をどのように扱うかのモードを制御します。 有効なモードの詳細については git-diff(1) の--color-moved-ws
を参照してください。
SEE ALSO
GIT
Part of the git(1) suite