日本語 ▾ トピック ▾ 最新バージョン ▾ 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`の共通の祖先(merge base)を使用します。`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`の共通の祖先(merge base)を使用します。`git diff --merge-base A`は`git diff $(git merge-base A HEAD)`と同じです。

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

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

--merge-baseが指定された場合、2つのコミットの共通の祖先(merge base)を「変更前」の側として使用します。`git diff --merge-base A B`は`git 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...B`は`git 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>行のコンテキストで差分を生成します。`--patch`を意味します。

--output=<file>

標準出力ではなく、特定のファイルに出力します。

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

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

--raw

差分をraw形式で生成します。

--patch-with-raw

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

--indent-heuristic

パッチを読みやすくするために、差分ハンクの境界を移動させるヒューリスティックを有効にします。これがデフォルトです。

--no-indent-heuristic

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

--minimal

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

--patience

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

--histogram

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

--anchored=<text>

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

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

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

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

差分アルゴリズムを選択します。以下のバリアントがあります。

default
myers

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

minimal

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

patience

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

histogram

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

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

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

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

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

--compact-summary

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

--numstat

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

--shortstat

`--stat`形式の最後の行のみを出力します。そこには変更されたファイルの総数と、追加・削除された行数が含まれます。

-X [<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>]

カラーdiffを表示します。`--color`(つまり`=<when>`なし)は`--color=always`と同じです。<when>は`always`、`never`、`auto`のいずれかになります。`color.ui`および`color.diff`の設定によって変更できます。

--no-color

カラーdiffをオフにします。これは設定を上書きするために使用できます。`--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`に似ていますが、移動されたコードの面白くない部分が追加で薄暗く表示されます。隣接する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

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

--no-color-moved-ws

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

--word-diff[=<mode>]

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

color

変更された単語を色のみを使用してハイライトします。`--color`を意味します。

plain

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

porcelain

スクリプトでの利用を意図した、特殊な行ベースの形式を使用します。追加/削除/変更なしの実行は、通常の統合diff形式で、行の先頭に`+` / `-` / ` `文字で始まり、行末まで続く形で表示されます。入力中の改行は、それ自身の行にチルダ`~`で表現されます。

none

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

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

--word-diff-regex=<regex>

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

<regex>の重複しない各一致は単語と見なされます。これらの一致の間のものはすべて空白と見なされ、差分を見つける目的で無視されます(!)。すべての非空白文字と一致するように、正規表現に`|[^[:space:]]`を追加することをお勧めします。改行を含む一致は、改行で黙って切り捨てられます(!)。

例えば、`--word-diff-regex=.`は、各文字を単語として扱い、それに応じて文字ごとの差分を表示します。

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

--color-words[=<regex>]

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

--no-renames

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

--[no-]rename-empty

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

--check

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

--ws-error-highlight=<kind>

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

--full-index

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

--binary

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

--abbrev[=<n>]

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

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

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

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

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

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

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

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

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

--find-copies-harder

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

-D
--irreversible-delete

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

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

-l<num>

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

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

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

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

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

-S<string>

ファイル内で指定された<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>より前のファイルを出力から破棄する (つまりスキップする)、またはそれらを出力の最後に移動する (つまりローテーションする)。これらのオプションは主に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>

指定された<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フィルターは通常一方通行の変換であるため、生成されるdiffは人間が読むには適しているが、適用することはできない。このため、textconvフィルターはデフォルトでgit-diff[1]git-log[1]でのみ有効になっており、git-format-patch[1]やdiff plumbingコマンドでは有効になっていない。

--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-Way Merge"セクションを参照。

-0

未マージのエントリのdiff出力を省略し、"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. ステータス、その後にオプションの"スコア"番号。

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

  12. "src"のパス

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

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

  15. レコードを終了するため、-zオプションが使用されている場合はLFまたは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バイトで終端される。

マージのdiff形式

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

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

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

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

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

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

-pオプションが生成するものは、従来の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. ハンクヘッダーは、そのハンクが適用される関数の名前を示す。特定の言語に合わせてこれを調整する方法の詳細については、gitattributes[5]の「Defining a custom hunk-header」を参照。

結合diff形式

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

「結合diff」形式は次のようになる

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

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

 +	if (get_sha1(arg, sha1) < 0)
 +		usage(describe_usage);
 +	cmit = lookup_commit_reference(sha1);
 +	if (!cmit)
 +		usage(describe_usage);
 +
	if (!initialized) {
		initialized = 1;
		for_each_ref(get_name);
  1. それは、次のような「git diff」ヘッダーによって先行される(-cオプションが使用されている場合)

    diff --combined file

    または次のようになる(--ccオプションが使用されている場合)

    diff --cc file
  2. その後に1つ以上の拡張ヘッダー行が続く(この例は2つの親を持つマージを示す)

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

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

  3. その後に2行のfrom-file/to-fileヘッダーが続く

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

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

    ただし、--combined-all-pathsオプションが指定されている場合、2行のfrom-file/to-fileの代わりに、マージコミットの親の数Nに応じたN+1行のfrom-file/to-fileヘッダーが得られる

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

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

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

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

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

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

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

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

git diff-tree -cで表示される場合、マージコミットの親とマージ結果を比較する(すなわち、file1..fileNが親である)。git diff-files -cで表示される場合、解決されていない2つのマージ親とワーキングツリーファイルを比較する(すなわち、file1はステージ2、別名「我々のバージョン」、file2はステージ3、別名「彼らのバージョン」)。

その他のdiff形式

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

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

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

--numstatオプションはdiffstat(1)情報を提供するが、より機械が処理しやすいように設計されている。--numstat出力のエントリは次のようになる

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

つまり、左から右へ

  1. 追加された行数;

  2. タブ;

  3. 削除された行数;

  4. タブ;

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

  6. 改行。

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

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

つまり

  1. 追加された行数;

  2. タブ;

  3. 削除された行数;

  4. タブ;

  5. NUL(名前変更/コピーの場合のみ存在);

  6. プリイメージのパス名;

  7. NUL(名前変更/コピーの場合のみ存在);

  8. ポストイメージのパス名(名前変更/コピーの場合のみ存在);

  9. NUL。

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

ワーキングツリーをチェックするさまざまな方法
$ git 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. トピックブランチがマスターブランチから開始されて以来、マスターブランチで発生した変更。

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

  2. 名前と変更の種類のみを表示し、実際のdiff出力は表示しない。

  3. diff出力を指定されたサブツリーに限定する。

diff出力の操作
$ git diff --find-copies-harder -B -C  (1)
$ git diff -R                          (2)
  1. 名前変更、コピー、完全な書き換えを見つけるためにより多くのサイクルを消費する(非常にコストが高い)。

  2. diffを逆順に出力する。

設定

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

diff.autoRefreshIndex

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

diff.dirstat

--dirstatパラメータのコンマ区切りリストで、git diffなどの--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>行のコンテキストでdiffを生成する。この値は-Uオプションによって上書きされる。

diff.interHunkContext

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

diff.external

この設定変数が設定されている場合、diff生成は内部のdiff機構を使用せず、指定されたコマンドを使用して実行される。GIT_EXTERNAL_DIFF環境変数で上書きできる。コマンドはgit[1]の「git Diffs」で説明されているパラメータで呼び出される。注:ファイルの一部のみで外部diffプログラムを使用したい場合は、代わりにgitattributes[5]を使用することを検討してください。

diff.trustExitCode

このブール値がtrueに設定されている場合、diff.externalコマンドは、入力ファイルが同じであると判断した場合は終了コード0を返し、異なる場合はdiff(1)のように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/とは異なるプレフィックスペアを使用する。この設定が有効な場合、逆順のdiff出力でもプレフィックスの順序が入れ替わる。

git diff

(i)ntexと(w)ork treeを比較する;

git diff HEAD

(c)ommitと(w)ork treeを比較する;

git diff --cached

(c)ommitと(i)ntexを比較する;

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 Porcelainのみに影響し、git-diff-files[1]のような下位レベルのコマンドには影響しないことに注意。

diff.suppressBlankEmpty

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

diff.submodule

サブモジュールの差分を表示する形式を指定する。short形式は、範囲の最初と最後にあるコミットの名前のみを表示する。log形式は、git-submodule[1]summaryと同様に、範囲内のコミットをリスト表示する。diff形式は、サブモジュールの変更されたコンテンツのインラインdiffを表示する。デフォルトはshort

diff.wordRegex

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

diff.<driver>.command

カスタムdiffドライバーコマンド。詳細についてはgitattributes[5]を参照。

diff.<driver>.trustExitCode

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

diff.<driver>.xfuncname

diffドライバーがハンクヘッダーを認識するために使用する正規表現。組み込みパターンも使用できる。詳細についてはgitattributes[5]を参照。

diff.<driver>.binary

このオプションをtrueに設定すると、diffドライバーがファイルをバイナリとして扱うようになる。詳細についてはgitattributes[5]を参照。

diff.<driver>.textconv

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

diff.<driver>.wordRegex

diffドライバーが一行内の単語を分割するために使用すべき正規表現。詳細についてはgitattributes[5]を参照。

diff.<driver>.cachetextconv

このオプションをtrueに設定すると、diffドライバーがテキスト変換出力をキャッシュするようになる。詳細についてはgitattributes[5]を参照。

diff.indentHeuristic

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

diff.algorithm

差分アルゴリズムを選択します。以下のバリアントがあります。

default
myers

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

minimal

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

patience

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

histogram

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

diff.wsErrorHighlight

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

diff.colorMoved

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

diff.colorMovedWS

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

Git

git[1]スイートの一部

scroll-to-top