セットアップと設定
プロジェクトの取得と作成
基本的なスナップショット
ブランチとマージ
プロジェクトの共有と更新
検査と比較
パッチ
デバッグ
メール
外部システム
サーバー管理者
-
2.47.0
10/06/24
- 2.46.1 → 2.46.2 変更なし
-
2.46.0
07/29/24
- 2.45.1 → 2.45.2 変更なし
-
2.45.0
04/29/24
- 2.44.1 → 2.44.2 変更なし
-
2.44.0
02/23/24
- 2.43.2 → 2.43.5 変更なし
-
2.43.1
02/09/24
-
2.43.0
11/20/23
- 2.42.2 → 2.42.3 変更なし
-
2.42.1
11/02/23
-
2.42.0
08/21/23
- 2.41.1 → 2.41.2 変更なし
-
2.41.0
06/01/23
- 2.40.1 → 2.40.3 変更なし
-
2.40.0
03/12/23
- 2.39.1 → 2.39.5 変更なし
-
2.39.0
12/12/22
- 2.38.1 → 2.38.5 変更なし
-
2.38.0
10/02/22
- 2.37.3 → 2.37.7 変更なし
-
2.37.2
08/11/22
- 2.36.1 → 2.37.1 変更なし
-
2.36.0
04/18/22
- 2.34.1 → 2.35.8 変更なし
-
2.34.0
11/15/21
- 2.33.1 → 2.33.8 変更なし
-
2.33.0
08/16/21
- 2.32.1 → 2.32.7 変更なし
-
2.32.0
06/06/21
- 2.31.1 → 2.31.8 変更なし
-
2.31.0
03/15/21
- 2.30.1 → 2.30.9 変更なし
-
2.30.0
12/27/20
- 2.29.1 → 2.29.3 変更なし
-
2.29.0
10/19/20
- 2.28.1 変更なし
-
2.28.0
07/27/20
- 2.25.2 → 2.27.1 変更なし
-
2.25.1
02/17/20
-
2.25.0
01/13/20
- 2.24.1 → 2.24.4 変更なし
-
2.24.0
11/04/19
- 2.22.1 → 2.23.4 変更なし
-
2.22.0
06/07/19
- 2.21.1 → 2.21.4 変更なし
-
2.21.0
02/24/19
- 2.20.1 → 2.20.5 変更なし
-
2.20.0
12/09/18
- 2.19.3 → 2.19.6 変更なし
-
2.19.2
11/21/18
- 2.19.1 変更なし
-
2.19.0
09/10/18
- 2.18.1 → 2.18.5 変更なし
-
2.18.0
06/21/18
- 2.17.1 → 2.17.6 変更なし
-
2.17.0
04/02/18
-
2.16.6
12/06/19
-
2.15.4
12/06/19
-
2.14.6
12/06/19
-
2.13.7
05/22/18
-
2.12.5
09/22/17
-
2.11.4
09/22/17
- 2.10.5 変更なし
-
2.9.5
07/30/17
-
2.8.6
07/30/17
- 2.7.6 変更なし
-
2.6.7
05/05/17
-
2.5.6
05/05/17
-
2.4.12
05/05/17
-
2.3.10
09/28/15
- 2.1.4 → 2.2.3 変更なし
-
2.0.5
12/17/14
概要
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つのblobオブジェクト間の変更、またはディスク上の2つのファイル間の変更を表示します。
- git diff [<オプション>] [--] [<パス>…]
-
この形式は、インデックス(次のコミットのためのステージングエリア)に対して行った変更を表示するためのものです。言い換えれば、違いは、Gitにインデックスに追加するように指示 *できる* が、まだ行っていないものです。これらの変更は、git-add[1] を使用してステージングできます。
- git diff [<オプション>] --no-index [--] <パス> <パス>
-
この形式は、ファイルシステム上の指定された2つのパスを比較するためのものです。Gitによって制御されている作業ツリーでコマンドを実行する場合、およびパスの少なくとも1つが作業ツリーの外を指している場合、またはGitによって制御されている作業ツリーの外でコマンドを実行する場合は、
--no-index
オプションを省略できます。この形式は--exit-code
を意味します。 - git diff [<オプション>] --cached [--merge-base] [<コミット>] [--] [<パス>…]
-
この形式は、指定された <コミット> に対して、次のコミットのためにステージングした変更を表示するためのものです。通常は最新のコミットとの比較が必要になるため、<コミット> を指定しない場合は、デフォルトでHEADになります。HEADが存在しない(たとえば、まだブランチがない場合)で、<コミット> が指定されていない場合は、ステージングされたすべての変更が表示されます。--staged は --cached の同義語です。
--merge-base が指定されている場合は、<コミット> を使用する代わりに、<コミット> と HEAD のマージベースを使用します。
git diff --cached --merge-base A
はgit diff --cached $(git merge-base A HEAD)
と同等です。 - git diff [<オプション>] [--merge-base] <コミット> [--] [<パス>…]
-
この形式は、指定された <コミット> に対して、作業ツリーにある変更を表示するためのものです。HEADを使用して最新のコミットと比較したり、ブランチ名を使用して別のブランチの先端と比較したりできます。
--merge-base が指定されている場合は、<コミット> を使用する代わりに、<コミット> と HEAD のマージベースを使用します。
git diff --merge-base A
はgit diff $(git merge-base A HEAD)
と同等です。 - git diff [<オプション>] [--merge-base] <コミット> <コミット> [--] [<パス>…]
-
これは、2つの任意の <コミット> 間の変更を表示するためのものです。
--merge-base が指定されている場合は、「before」側として2つのコミットのマージベースを使用します。
git diff --merge-base A B
はgit diff $(git merge-base A B) B
と同等です。 - git diff [<オプション>] <コミット> <コミット>… <コミット> [--] [<パス>…]
-
この形式は、マージコミットの結果を表示するためのものです。最初にリストされた <コミット> はマージ自体である必要があります。残りの2つ以上のコミットは、その親である必要があります。目的のリビジョンセットを生成する便利な方法は、接尾辞
^@
と^!
を使用することです。Aがマージコミットの場合、git diff A A^@
、git diff A^!
、およびgit show A
はすべて同じ結合されたdiffになります。 - git diff [<オプション>] <コミット>..<コミット> [--] [<パス>…]
-
これは、2つの任意の <コミット> 間の変更を表示するための、前の形式(
..
なし)と同義です。一方の <コミット> を省略すると、代わりにHEADを使用するのと同じ効果があります。 - git diff [<オプション>] <コミット>...<コミット> [--] [<パス>…]
-
この形式は、両方の <コミット> の共通の祖先から開始して、2番目の <コミット> を含むブランチ上の変更を表示するためのものです。
git diff A...B
はgit diff $(git merge-base A B) B
と同等です。<コミット> のいずれかを省略できます。これは、代わりにHEADを使用するのと同じ効果があります。
エキゾチックなことを行っている場合に備えて、上記の記述の <コミット> はすべて、--merge-base
の場合と、..
表記を使用する最後の2つの形式を除いて、任意の <tree> にすることができます。対象となるツリーは、マージの競合が発生したときに *ort* マージ戦略によって書き込まれる AUTO_MERGE
という名前のrefが指すツリーです(git-merge[1]を参照)。作業ツリーと AUTO_MERGE
を比較すると、テキストの競合を解決するために今まで行った変更が表示されます(以下の例を参照)。
<コミット> を記述するより完全な方法については、gitrevisions[7] の「リビジョンの指定」セクションを参照してください。ただし、「diff」は、範囲ではなく2つの *エンドポイント* を比較するためのものであり、範囲表記(<commit>..<commit>
および <commit>...<commit>
)は、gitrevisions[7] の「範囲の指定」セクションで定義されている範囲を意味しません。
オプション
- -p
- -u
- --patch
-
パッチを生成します(-pを使用したパッチテキストの生成を参照)。これがデフォルトです。
- -s
- --no-patch
-
diff機構からのすべての出力を抑制します。デフォルトでパッチを表示する
git show
のようなコマンドで出力を抑制したり、エイリアスでコマンドラインの前の方にある--patch
、--stat
のようなオプションの効果をキャンセルしたりするのに役立ちます。 - -U<n>
- --unified=<n>
-
通常の3行の代わりに、<n> 行のコンテキストを持つdiffを生成します。
--patch
を意味します。 - --output=<file>
-
stdoutの代わりに特定のファイルに出力します。
- --output-indicator-new=<char>
- --output-indicator-old=<char>
- --output-indicator-context=<char>
-
生成されたパッチで、新しい行、古い行、またはコンテキスト行を示すために使用される文字を指定します。通常はそれぞれ +、- および ' ' です。
- --raw
-
diffをraw形式で生成します。
- --patch-with-raw
-
-p --raw
の同義語。 - --indent-heuristic
-
パッチを読みやすくするためにdiffのチャンク境界をシフトするヒューリスティックを有効にします。これがデフォルトです。
- --no-indent-heuristic
-
インデントヒューリスティックを無効にします。
- --minimal
-
可能な限り最小の差分を生成するために、追加の時間を費やします。
- --patience
-
"patience diff"アルゴリズムを使用して差分を生成します。
- --histogram
-
"histogram diff"アルゴリズムを使用して差分を生成します。
- --anchored=<text>
-
"anchored diff"アルゴリズムを使用して差分を生成します。
このオプションは複数回指定できます。
ソースとデスティネーションの両方に存在し、1回だけ存在し、このテキストで始まる行がある場合、このアルゴリズムは、出力で削除または追加として表示されないように試みます。内部的には "patience diff" アルゴリズムを使用します。
- --diff-algorithm={patience|minimal|histogram|myers}
-
差分アルゴリズムを選択します。バリアントは以下のとおりです。
たとえば、
diff.algorithm
変数をデフォルト以外の値に設定し、デフォルトの値を使用する場合は、--diff-algorithm=default
オプションを使用する必要があります。 - --stat[=<width>[,<name-width>[,<count>]]]
-
diffstatを生成します。デフォルトでは、ファイル名部分には必要なだけのスペースが使用され、残りはグラフ部分に使用されます。最大幅はデフォルトで端末の幅、または端末に接続されていない場合は80桁になり、
<width>
で上書きできます。ファイル名部分の幅は、カンマの後に別の幅<name-width>
を指定するか、diff.statNameWidth=<width>
を設定することで制限できます。グラフ部分の幅は、--stat-graph-width=<width>
を使用するか、diff.statGraphWidth=<width>
を設定することで制限できます。--stat
または--stat-graph-width
を使用すると、statグラフを生成するすべてのコマンドに影響しますが、diff.statNameWidth
またはdiff.statGraphWidth
を設定してもgit format-patch
には影響しません。3番目のパラメータ<count>
を指定することで、出力は最初の<count>
行に制限でき、それ以上ある場合は...
が続きます。これらのパラメータは、
--stat-width=<width>
、--stat-name-width=<name-width>
、--stat-count=<count>
を使用して個別に設定することもできます。 - --compact-summary
-
ファイル作成や削除(「new」または「gone」、オプションでシンボリックリンクの場合は「+l」)、およびモード変更(実行可能ビットの追加または削除の場合はそれぞれ「+x」または「-x」)などの拡張ヘッダー情報の簡潔な要約をdiffstatに出力します。情報はファイル名部分とグラフ部分の間に配置されます。
--stat
を暗示します。 - --numstat
-
--stat
と似ていますが、追加および削除された行数を10進数表記で、パス名を省略せずに表示し、機械がより扱いやすくします。バイナリファイルの場合、0 0
の代わりに2つの-
を出力します。 - --shortstat
-
変更されたファイルの合計数と、追加および削除された行数を含む、
--stat
形式の最後の行のみを出力します。 - -X[<param1,param2,…>]
- --dirstat[=<param1,param2,…>]
-
各サブディレクトリの変更量の相対的な分布を出力します。
--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[=<param1,param2>…]
-
--dirstat=files,<param1>,<param2>… の同義語
- --summary
-
作成、名前変更、モード変更などの拡張ヘッダー情報の簡潔な要約を出力します。
- --patch-with-stat
-
-p --stat
の同義語。 - -z
-
--raw
、--numstat
、--name-only
、または--name-status
が指定されている場合、パス名を変更せず、出力フィールドのターミネータとしてNULを使用します。このオプションがない場合、「異常な」文字を含むパス名は、構成変数
core.quotePath
(git-config[1]を参照)で説明されているように引用符で囲まれます。 - --name-only
-
変更された各ファイルの名前のみをポストイメージツリーに表示します。ファイル名はUTF-8でエンコードされることがよくあります。詳細については、git-log[1]マニュアルページのエンコードに関する説明を参照してください。
- --name-status
-
変更された各ファイルの名前とステータスのみを表示します。ステータス文字の意味については、
--diff-filter
オプションの説明を参照してください。--name-only
と同様に、ファイル名はUTF-8でエンコードされることがよくあります。 - --submodule[=<format>]
-
サブモジュールの違いをどのように表示するかを指定します。
--submodule=short
を指定すると、*short* 形式が使用されます。この形式は、範囲の最初と最後にあるコミットの名前のみを表示します。--submodule
または--submodule=log
が指定されると、*log* 形式が使用されます。この形式は、git-submodule[1]summary
と同様に、範囲内のコミットをリストします。--submodule=diff
が指定されると、*diff* 形式が使用されます。この形式は、コミット範囲間のサブモジュールコンテンツの変更のインライン差分を表示します。デフォルトはdiff.submodule
または、構成オプションが設定されていない場合は *short* 形式です。 - --color[=<when>]
-
色付きの差分を表示します。
--color
(つまり、*=<when>*なし)は--color=always
と同じです。*<when>* は、always
、never
、またはauto
のいずれかになります。これは、color.ui
およびcolor.diff
構成設定によって変更できます。 - --no-color
-
色付きの差分をオフにします。これは、構成設定を上書きするために使用できます。
--color=never
と同じです。 - --color-moved[=<mode>]
-
移動されたコード行は、異なる色で表示されます。これは、
diff.colorMoved
構成設定によって変更できます。<mode> は、オプションが指定されていない場合はデフォルトで *no* になり、モードなしのオプションが指定された場合は *zebra* になります。モードは次のいずれかである必要があります。- no
-
移動された行は強調表示されません。
- default
-
zebra
の同義語です。これは、将来、より適切なモードに変更される可能性があります。 - plain
-
ある場所で追加され、別の場所で削除された行は、*color.diff.newMoved* で色付けされます。同様に、diffの別の場所に追加された削除された行には *color.diff.oldMoved* が使用されます。このモードは移動された行をすべてピックアップしますが、コードブロックが順列なしで移動されたかどうかを判断するためのレビューではあまり役に立ちません。
- blocks
-
少なくとも20個の英数字からなる移動されたテキストのブロックは、貪欲に検出されます。検出されたブロックは、*color.diff.{old,new}Moved* カラーのいずれかを使用してペイントされます。隣接するブロックは区別できません。
- zebra
-
移動されたテキストのブロックは、*blocks* モードのように検出されます。ブロックは、*color.diff.{old,new}Moved* カラーまたは *color.diff.{old,new}MovedAlternative* のいずれかを使用してペイントされます。2つの色の変化は、新しいブロックが検出されたことを示します。
- dimmed-zebra
-
zebra と似ていますが、移動されたコードの面白くない部分の追加の暗転が実行されます。隣接する2つのブロックの境界線は興味深いと見なされ、残りは面白くありません。
dimmed_zebra
は非推奨の同義語です。
- --no-color-moved
-
移動検出をオフにします。これは、構成設定を上書きするために使用できます。
--color-moved=no
と同じです。 - --color-moved-ws=<modes>
-
これは、
--color-moved
の移動検出を実行するときに空白をどのように無視するかを構成します。これは、diff.colorMovedWS
構成設定で設定できます。これらのモードは、カンマ区切りのリストとして指定できます。- no
-
移動検出を実行するときに空白を無視しません。
- ignore-space-at-eol
-
EOLの空白の変更を無視します。
- ignore-space-change
-
空白の量の変更を無視します。これにより、行末の空白が無視され、1つ以上の空白文字の他のすべてのシーケンスが同等と見なされます。
- ignore-all-space
-
行を比較するときに空白を無視します。これにより、一方の行に空白があり、もう一方の行に空白がない場合でも、違いが無視されます。
- allow-indentation-change
-
まず、移動検出の際に空白を無視し、次に、空白の変更が1行あたり同じである場合にのみ、移動されたコードブロックを1つのブロックにグループ化します。これは他のモードとは互換性がありません。
- --no-color-moved-ws
-
移動検出を行う際に、空白を無視しません。これは、設定を上書きするために使用できます。
--color-moved-ws=no
と同じです。 - --word-diff[=<mode>]
-
変更された単語を区切るために <mode> を使用して、単語単位の差分を表示します。デフォルトでは、単語は空白で区切られます。以下の
--word-diff-regex
を参照してください。 <mode> のデフォルトは plain であり、次のいずれかである必要があります。- color
-
色のみを使用して、変更された単語を強調表示します。
--color
を暗示します。 - plain
-
単語を
[-削除-]
および{+追加+}
として表示します。入力に区切り文字が現れた場合、区切り文字をエスケープしようとしないため、出力があいまいになる可能性があります。 - porcelain
-
スクリプトによる消費を目的とした特別な行ベースのフォーマットを使用します。追加/削除/変更なしの実行は、通常の unified 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
-
空の blob を名前変更元として使用するかどうか。
- --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
-
パッチフォーマットの出力を生成する際に、最初の数文字の代わりに、"index" 行に完全な事前および事後イメージ blob オブジェクト名を表示します。
- --binary
-
--full-index
に加えて、git-apply
で適用できるバイナリ diff を出力します。--patch
を暗示します。 - --abbrev[=<n>]
-
diff-raw フォーマット出力および diff-tree ヘッダー行で、完全な 40 バイトの 16 進数オブジェクト名の代わりに、オブジェクトを一意に参照する少なくとも <n> 桁の 16 進数の最短プレフィックスを表示します。diff-patch 出力フォーマットでは、
--full-index
が優先されます。つまり、--full-index
が指定されている場合は、--abbrev
に関係なく完全な blob 名が表示されます。デフォルト以外の桁数は--abbrev=<n>
で指定できます。 - -B[<n>][/<m>]
- --break-rewrites[=[<n>][/<m>]]
-
完全な書き換え変更を削除と作成のペアに分割します。これは 2 つの目的を果たします。
ファイルの全体的な書き換えに相当する変更を、コンテキストとしてテキストに一致する行がごくわずかしかない一連の削除と挿入が混ざり合ったものではなく、古いもののすべてを単一削除し、その後に新しいもののすべてを単一挿入として処理する方法に影響します。数値
m
は、-B オプションのこの側面を制御します (デフォルトは 60%)。-B/70%
は、Git がそれを完全な書き換えと見なすために、元の 30% 未満が結果に残る必要があることを指定します (つまり、それ以外の場合、結果のパッチはコンテキスト行と混ざり合った一連の削除と挿入になります)。-M とともに使用すると、完全に書き換えられたファイルも名前変更のソースと見なされます (通常、-M は消えたファイルのみを名前変更のソースと見なします)。数値
n
は、-B オプションのこの側面を制御します (デフォルトは 50%)。-B20%
は、ファイルのサイズの 20% 以上と比較して、追加と削除を伴う変更が、別のファイルへの名前変更の可能なソースとして選択される資格があることを指定します。 - -M[<n>]
- --find-renames[=<n>]
-
名前の変更を検出します。
n
が指定されている場合、それは類似度インデックス (つまり、ファイルのサイズと比較した追加/削除の量) のしきい値です。たとえば、-M90%
は、ファイルの 90% 以上が変更されていない場合、Git が削除/追加のペアを名前変更と見なす必要があることを意味します。%
記号がない場合、数値は小数点が付いた分数として読み取られます。つまり、-M5
は 0.5 になり、-M50%
と同じになります。同様に、-M05
は-M5%
と同じです。検出を正確な名前の変更に限定するには、-M100%
を使用します。デフォルトの類似度インデックスは 50% です。 - -C[<n>]
- --find-copies[=<n>]
-
名前の変更だけでなくコピーも検出します。
--find-copies-harder
も参照してください。n
が指定されている場合、-M<n>
と同じ意味を持ちます。 - --find-copies-harder
-
パフォーマンス上の理由から、デフォルトでは、
-C
オプションは、コピーの元のファイルが同じ変更セットで変更された場合にのみコピーを検出します。このフラグを使用すると、コマンドはコピー元の候補として変更されていないファイルを検査します。これは大規模なプロジェクトでは非常にコストのかかる操作であるため、注意して使用してください。複数の-C
オプションを指定すると、同じ効果があります。 - -D
- --irreversible-delete
-
削除のプリイメージを省略します。つまり、ヘッダーのみを出力し、プリイメージと
/dev/null
の間の差分は出力しません。結果のパッチは、patch
またはgit apply
で適用することを意図していません。これは、変更後のテキストのレビューに集中したい人だけを対象としています。さらに、出力にはそのようなパッチを逆方向に (手動でも) 適用するのに十分な情報が明らかに不足しているため、このオプションの名前が付いています。-B
と一緒に使用すると、削除/作成ペアの削除部分のプリイメージも省略します。 - -l<num>
-
-M
および-C
オプションには、名前変更/コピーのサブセットを安価に検出できるいくつかの予備ステップと、残りのペアになっていないすべての宛先を関連するすべてのソースと比較する網羅的なフォールバック部分が含まれます。(名前変更の場合、残りのペアになっていないソースのみが関連します。コピーの場合、すべての元のソースが関連します。) N 個のソースと宛先の場合、この網羅的なチェックは O(N^2) です。このオプションは、関係するソース/宛先ファイルの数が指定された数を超えた場合、名前変更/コピー検出の網羅的な部分が実行されないようにします。デフォルトは diff.renameLimit です。値 0 は無制限として扱われることに注意してください。 - --diff-filter=[(A|C|D|M|R|T|U|X|B)…[*]]
-
追加 (
A
)、コピー (C
)、削除 (D
)、変更 (M
)、名前変更 (R
)、タイプ (つまり、通常ファイル、シンボリックリンク、サブモジュール、...) が変更された (T
)、マージされていない (U
)、不明 (X
)、またはペアリングが壊れた (B
) ファイルのみを選択します。フィルター文字の任意の組み合わせ (なしも含む) を使用できます。*
(All-or-none) が組み合わせに追加されると、比較で他の基準に一致するファイルがある場合、すべてのパスが選択されます。他の基準に一致するファイルがない場合は、何も選択されません。また、これらの大文字は小文字にして除外できます。たとえば、
--diff-filter=ad
は追加および削除されたパスを除外します。すべての差分がすべてのタイプを備えているわけではないことに注意してください。たとえば、それらのタイプの検出が無効になっている場合、コピーされたエントリと名前が変更されたエントリは表示されません。
- -S<string>
-
ファイル内の指定された文字列の出現回数 (つまり、追加/削除) を変更する差分を検索します。スクリプターの使用を目的としています。
特定のコードブロック (構造体など) を探していて、そのブロックが最初に作成されてからの履歴を知りたい場合に役立ちます。この機能を繰り返し使用して、プリイメージ内の関心のあるブロックを
-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 を検索するという点で引数が異なります。オブジェクトは blob またはサブモジュールコミットにすることができます。これは、ツリーも検索するために
git-log
に-t
オプションを暗黙的に指定します。 - --pickaxe-all
-
-S
または-G
が変更を見つけた場合、<string> 内の変更を含むファイルだけでなく、その変更セット内のすべての変更を表示します。 - --pickaxe-regex
-
-S
に指定された <string> を、一致させる拡張 POSIX 正規表現として扱います。 - -O<orderfile>
-
出力にファイルが表示される順序を制御します。これは、
diff.orderFile
設定変数(git-config[1]を参照)を上書きします。diff.orderFile
をキャンセルするには、-O/dev/null
を使用します。出力順序は、<orderfile> 内の glob パターンの順序によって決定されます。最初のパターンに一致するパス名を持つすべてのファイルが最初に出力され、2 番目のパターン(ただし最初のパターンではない)に一致するパス名を持つすべてのファイルが次に出力されます。パターンに一致しないパス名を持つすべてのファイルは、ファイルの最後に暗黙的なすべて一致パターンがあるかのように、最後に出力されます。複数のパス名が同じランクを持っている場合(同じパターンに一致するが、以前のパターンではない場合)、それらの出力順序は通常の順序になります。
<orderfile> は次のように解析されます。
-
空白行は無視されるため、可読性のための区切り文字として使用できます。
-
ハッシュ ("
#
") で始まる行は無視されるため、コメントに使用できます。パターンがハッシュで始まる場合は、パターンの先頭にバックスラッシュ ("\
") を追加します。 -
その他の各行には、単一のパターンが含まれています。
パターンは、FNM_PATHNAME フラグなしで fnmatch(3) に使用されるパターンと同じ構文とセマンティクスを持っています。ただし、パス名の最後のコンポーネントを任意に削除したものがパターンに一致する場合、パス名もパターンに一致します。たとえば、パターン "
foo*bar
" は "fooasdfbar
" および "foo/bar/baz/asdf
" に一致しますが、"foobarx
" には一致しません。 -
- --skip-to=<file>
- --rotate-to=<file>
-
指定された <file> より前のファイルを(つまり、スキップして)出力から破棄するか、出力の最後に移動します(つまり、回転して)。これらのオプションは主に
git difftool
コマンドで使用するために作成されたものであり、それ以外ではあまり役に立たない可能性があります。 - -R
-
2 つの入力を交換します。つまり、インデックスまたはディスク上のファイルからツリーコンテンツへの差分を表示します。
- --relative[=<path>]
- --no-relative
-
プロジェクトのサブディレクトリから実行する場合、このオプションを使用すると、ディレクトリ外の変更を除外し、それに対する相対パス名を表示するように指示できます。サブディレクトリにいない場合(たとえば、ベアリポジトリの場合)、引数として <path> を指定することで、出力の相対的な基準となるサブディレクトリを指定できます。
--no-relative
は、diff.relative
設定オプションと以前の--relative
の両方を無効にするために使用できます。 - -a
- --text
-
すべてのファイルをテキストとして扱います。
- --ignore-cr-at-eol
-
比較時に行末のキャリッジリターンを無視します。
- --ignore-space-at-eol
-
EOLの空白の変更を無視します。
- -b
- --ignore-space-change
-
空白の量の変更を無視します。これにより、行末の空白が無視され、1つ以上の空白文字の他のすべてのシーケンスが同等と見なされます。
- -w
- --ignore-all-space
-
行を比較するときに空白を無視します。これにより、一方の行に空白があり、もう一方の行に空白がない場合でも、違いが無視されます。
- --ignore-blank-lines
-
すべての行が空白である変更を無視します。
- -I<regex>
- --ignore-matching-lines=<regex>
-
すべての行が <regex> に一致する変更を無視します。このオプションは複数回指定できます。
- --inter-hunk-context=<lines>
-
diff のハンク間のコンテキストを指定された行数まで表示し、互いに近いハンクを融合させます。デフォルトは
diff.interHunkContext
、または設定オプションが設定されていない場合は 0 です。 - -W
- --function-context
-
各変更のコンテキスト行として関数全体を表示します。関数名は、
git diff
がパッチハンクヘッダーを処理するのと同じ方法で決定されます(gitattributes[5] の カスタムハンクヘッダーの定義を参照)。 - --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[=<when>]
-
diff 生成時にサブモジュールへの変更を無視します。<when> は "none"、"untracked"、"dirty" または "all" のいずれかです。デフォルトは "all" です。"none" を使用すると、サブモジュールに未追跡または変更されたファイルが含まれている場合、またはその HEAD がスーパープロジェクトに記録されたコミットと異なる場合にサブモジュールが変更されたと見なされます。また、git-config[1] または gitmodules[5] の ignore オプションの設定を上書きするために使用できます。"untracked" を使用すると、サブモジュールが未追跡コンテンツのみを含む場合はダーティとは見なされません(ただし、変更されたコンテンツについては引き続きスキャンされます)。"dirty" を使用すると、サブモジュールの作業ツリーへのすべての変更が無視され、スーパープロジェクトに保存されているコミットへの変更のみが表示されます(これは 1.7.0 までの動作でした)。"all" を使用すると、サブモジュールへのすべての変更が非表示になります。
- --src-prefix=<prefix>
-
"a/" の代わりに、指定されたソースプレフィックスを表示します。
- --dst-prefix=<prefix>
-
"b/" の代わりに、指定された宛先プレフィックスを表示します。
- --no-prefix
-
ソースまたは宛先プレフィックスを表示しません。
- --default-prefix
-
デフォルトのソースおよび宛先プレフィックス("a/" および "b/")を使用します。これは、
diff.noprefix
、diff.srcPrefix
、diff.dstPrefix
、diff.mnemonicPrefix
などの設定変数を上書きします(git-config
(1) を参照)。 - --line-prefix=<prefix>
-
出力のすべての行に、追加のプレフィックスを付加します。
- --ita-invisible-in-index
-
デフォルトでは、"git add -N" で追加されたエントリは、"git diff" では既存の空のファイルとして表示され、"git diff --cached" では新しいファイルとして表示されます。このオプションは、エントリを "git diff" では新しいファイルとして表示し、"git diff --cached" では存在しないファイルとして表示します。このオプションは
--ita-visible-in-index
で元に戻すことができます。どちらのオプションも実験的なものであり、将来削除される可能性があります。
これらの一般的なオプションの詳細については、gitdiffcore[7] も参照してください。
- -1 --base
- -2 --ours
- -3 --theirs
-
作業ツリーを "base" バージョン(ステージ #1)、"our branch"(ステージ #2)または "their branch"(ステージ #3)と比較します。インデックスには、マージされていないエントリの場合のみ、これらのステージが含まれています。つまり、競合を解決している間です。詳細については、git-read-tree[1] セクション「3-Way Merge」を参照してください。
- -0
-
マージされていないエントリの diff 出力を省略し、単に「Unmerged」と表示します。作業ツリーとインデックスを比較する場合にのみ使用できます。
- <path>…
-
オプションとして指定できる
<paths>
パラメータは、差分を特定のパスに限定するために使用されます(ディレクトリ名を指定すると、そのディレクトリ内のすべてのファイルの差分を取得できます)。
Raw出力形式
"git-diff-index"、"git-diff-tree"、"git-diff-files"、および "git diff --raw" からの raw 出力形式は非常に似ています。
これらのコマンドはすべて、2つの要素の集合を比較しますが、比較対象は異なります。
"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" のモード。新規作成または未マージの場合は 000000。
-
スペース。
-
"dst" のモード。削除または未マージの場合は 000000。
-
スペース。
-
"src" の sha1。新規作成または未マージの場合は 0{40}。
-
スペース。
-
"dst" の sha1。削除、未マージ、または「ワークツリーがインデックスと同期していない」場合は 0{40}。
-
スペース。
-
ステータス。オプションで "score" 数値が続く。
-
タブまたは NUL (
-z
オプションが使用されている場合)。 -
"src" のパス。
-
タブまたは NUL (
-z
オプションが使用されている場合)。C または R の場合にのみ存在します。 -
"dst" のパス。C または R の場合にのみ存在します。
-
LF または NUL (
-z
オプションが使用されている場合)。レコードを終了します。
使用可能なステータス文字は次のとおりです。
-
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-tree"、"git-diff-files"、および "git-diff --raw" は、マージコミットの差分出力も生成するために -c
または --cc
オプションを使用できます。出力は、次の点で上記で説明した形式とは異なります。
-
親ごとにコロンがあります。
-
より多くの "src" モードと "src" sha1 があります。
-
ステータスは、親ごとの連結されたステータス文字です。
-
オプションの "score" 数値はありません。
-
ファイルのタブ区切りパス名。
-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
結合差分は、すべての親から変更されたファイルのみをリストすることに注意してください。
-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 オプションで生成されるものは、従来の差分形式とはわずかに異なります。
-
次のような "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>
ファイルモードは、ファイルタイプとファイル許可ビットを含む6桁の8進数として出力されます。
拡張ヘッダーのパス名には、
a/
およびb/
の接頭辞は含まれません。類似度インデックスは、変更されていない行の割合であり、非類似度インデックスは変更された行の割合です。切り捨てられた整数で、その後にパーセント記号が続きます。したがって、100%の類似度インデックス値は、2つの等しいファイル用に予約されており、100%の非類似度は、古いファイルの行が新しいファイルに何も含まれていないことを意味します。
インデックス行には、変更前後の blob オブジェクト名が含まれます。ファイルモードが変更されない場合は <mode> が含まれます。それ以外の場合は、古いモードと新しいモードを示す個別の行が表示されます。
-
「異常な」文字を含むパス名は、構成変数
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
-
Hunk ヘッダーには、hunk が適用される関数の名前が記載されています。特定の言語に合わせてこれを調整する方法の詳細については、gitattributes[5] の「カスタム hunk-header の定義」を参照してください。
結合差分形式
差分を生成するコマンドは、マージを表示するときに -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);
-
次のような "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>
少なくとも1つの <mode> が残りの <mode> と異なる場合にのみ、
mode <mode>,<mode>..<mode>
行が表示されます。検出されたコンテンツの移動 (名前変更およびコピー検出) に関する情報を含む拡張ヘッダーは、2つの <tree-ish> の差分で機能するように設計されており、結合差分形式では使用されません。 -
その後に、2行の from-file/to-file ヘッダーが続きます。
--- a/file +++ b/file
従来のunified差分形式の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
この拡張形式は、名前変更またはコピーの検出がアクティブになっている場合に、異なる親のファイル元の名前を確認できるため便利です。
-
Chunk ヘッダー形式は、
patch -p1
に誤ってフィードすることを防ぐために変更されています。結合差分形式は、マージコミットの変更を確認するために作成されたものであり、適用されることを意図していません。変更は、拡張インデックスヘッダーの変更に似ています。@@@ <from-file-range> <from-file-range> <to-file-range> @@@
結合差分形式のチャンクヘッダーには、(親の数 + 1) 個の
@
文字があります。
従来のunified差分形式とは異なり、2つのファイル A と B を、-
(マイナス - A には表示されるが B では削除された)、+
(プラス - A にはないが B に追加された)、または " "
(スペース - 変更なし) のプレフィックスを持つ単一の列で表示しますが、この形式は、2つ以上のファイル file1, file2,… を 1つのファイル X と比較し、X が fileN のそれぞれとどのように異なるかを示します。X の行がどのように異なるかを示すために、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/Makefile
を arch/x86/Makefile
に移動し、同時に4行を修正する変更は、次のように表示されます。
arch/{i386 => x86}/Makefile | 4 +--
--numstat
オプションは、diffstat(1)情報を提供しますが、機械による解析を容易にするように設計されています。--numstat
出力の項目は、次のようになります。
1 2 README 3 1 arch/{i386 => x86}/Makefile
つまり、左から右に
-
追加された行数;
-
タブ;
-
削除された行数;
-
タブ;
-
パス名(場合によっては、名前変更/コピー情報付き);
-
改行。
-z
出力オプションが有効な場合、出力はこのようにフォーマットされます。
1 2 README NUL 3 1 NUL arch/i386/Makefile NUL arch/x86/Makefile NUL
つまり
-
追加された行数;
-
タブ;
-
削除された行数;
-
タブ;
-
NUL(名前変更/コピーの場合のみ存在);
-
変更前のイメージのパス名;
-
NUL(名前変更/コピーの場合のみ存在);
-
変更後のイメージのパス名(名前変更/コピーの場合のみ存在);
-
NUL。
名前変更の場合の変更前のイメージパスの前の余分な NUL
は、出力を読み取るスクリプトが、読み取っている現在のレコードが単一パスレコードなのか、名前変更/コピーレコードなのかを、先読みせずに判断できるようにするためです。追加および削除された行を読み取った後、NUL
まで読み取るとパス名が得られますが、それが NUL
の場合、レコードは2つのパスを示します。
例
- 作業ツリーを確認するさまざまな方法
-
$ 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」ブランチの先端と比較する代わりに、現在のブランチの先端と比較しますが、比較をファイル「test」に限定します。
-
最後のコミットの前のバージョンと最後のコミットを比較します。
-
- ブランチの比較
-
$ git diff topic master (1) $ git diff topic..master (2) $ git diff topic...master (3)
-
トピックブランチとマスターブランチの先端の間の変更。
-
上記と同じ。
-
トピックブランチがマスターブランチから分岐した後に、マスターブランチで発生した変更。
-
- diff出力の制限
-
$ git diff --diff-filter=MRC (1) $ git diff --name-status (2) $ git diff arch/i386 include/asm-i386 (3)
-
変更、名前変更、コピーのみを表示し、追加または削除は表示しません。
-
名前と変更の種類のみを表示し、実際のdiff出力は表示しません。
-
diff出力を指定されたサブツリーに制限します。
-
- diff出力の操作
-
$ git diff --find-copies-harder -B -C (1) $ git diff -R (2)
-
名前変更、コピー、および完全な書き換えを見つけるために、追加のサイクルを費やします(非常にコストがかかります)。
-
diffを逆に出力します。
-
構成
このセクションのこの行より下のすべては、git-config[1] ドキュメントから選択的に含まれています。内容はそこにあるものと同じです
- diff.autoRefreshIndex
-
git diff を使用して作業ツリーファイルと比較する場合、statのみの変更は変更されたと見なさないでください。代わりに、
git update-index --refresh
を暗黙的に実行して、作業ツリーの内容がインデックスの内容と一致するパスのキャッシュされたstat情報を更新します。このオプションはデフォルトでtrueです。これは git diff Porcelainにのみ影響し、git diff-files のような低レベルの diff コマンドには影響しないことに注意してください。 - diff.dirstat
-
--dirstat
オプションのデフォルトの動作を指定する、コンマ区切りの--dirstat
パラメーターのリストです。git-diff[1] およびその仲間です。デフォルトは、コマンドラインで上書きできます(--dirstat=<param1,param2,...>
を使用)。フォールバックのデフォルト(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
-
diffの塊間のコンテキストを指定された行数まで表示し、互いに近い塊を融合します。この値は、
--inter-hunk-context
コマンドラインオプションのデフォルトとして機能します。 - diff.external
-
この構成変数が設定されている場合、diff生成は内部diff機構を使用せずに、指定されたコマンドを使用して実行されます。 ‘GIT_EXTERNAL_DIFF’ 環境変数で上書きできます。コマンドは、git[1] の「git Diffs」で説明されているパラメーターで呼び出されます。注:ファイルのサブセットでのみ外部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 コマンドはこの設定の影響を受けません。デフォルトでは、追跡されていないサブモジュールが無視されるように、これは追跡されていないものに設定されます。 - diff.mnemonicPrefix
-
設定されている場合、git diff は比較対象に応じて、標準の「a/」と「b/」とは異なるプレフィックスペアを使用します。この構成が有効な場合、リバースdiff出力もプレフィックスの順序を入れ替えます
- diff.noPrefix
-
設定されている場合、git diff はソースまたは宛先のプレフィックスを表示しません。
- diff.srcPrefix
-
設定されている場合、git diff はこのソースプレフィックスを使用します。デフォルトは "a/" です。
- diff.dstPrefix
-
設定されている場合、git diff はこの宛先プレフィックスを使用します。デフォルトは "b/" です。
- diff.relative
-
true に設定されている場合、git diff はディレクトリ外の変更を表示せず、現在のディレクトリに対する相対パス名を表示します。
- diff.orderFile
-
diff内のファイルの順序を指定する方法を示すファイル。詳細については、git-diff[1] の -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を、異なる場合は終了コード1を返すことが期待されます。これはdiff(1)
と同様です。デフォルトであるfalseに設定されている場合、コマンドは等しいかどうかに関わらず終了コード0を返すことが期待されます。他の終了コードは、Gitに致命的なエラーを報告させます。 - diff.<driver>.xfuncname
-
diffドライバがhunkヘッダーを認識するために使用する正規表現です。組み込みのパターンを使用することもできます。詳細は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]を参照してください。
-
araxis
-
bc
-
codecompare
-
deltawalker
-
diffmerge
-
diffuse
-
ecmerge
-
emerge
-
examdiff
-
guiffy
-
gvimdiff
-
kdiff3
-
kompare
-
meld
-
nvimdiff
-
opendiff
-
p4merge
-
smerge
-
tkdiff
-
vimdiff
-
vscode
-
winmerge
-
xxdiff
-
- diff.indentHeuristic
-
パッチを読みやすくするために、diff hunkの境界をシフトするデフォルトのヒューリスティックを無効にするには、このオプションを
false
に設定します。 - diff.algorithm
-
差分アルゴリズムを選択します。バリアントは以下のとおりです。
- diff.wsErrorHighlight
-
diffの
context
、old
、またはnew
行の空白エラーを強調表示します。複数の値はカンマで区切られ、none
は以前の値をリセットし、default
はリストをnew
にリセットし、all
はold,new,context
の省略形です。空白エラーはcolor.diff.whitespace
で色付けされます。コマンドラインオプション--ws-error-highlight=<kind>
はこの設定を上書きします。 - diff.colorMoved
-
有効な
<mode>
またはtrue値のいずれかに設定した場合、diffで移動された行は異なる色で表示されます。有効なモードの詳細については、git-diff[1]の--color-movedを参照してください。単にtrueに設定すると、デフォルトのカラーモードが使用されます。falseに設定すると、移動された行は色付けされません。 - diff.colorMovedWS
-
移動された行が、例えば
diff.colorMoved
設定を使用して色付けされている場合、このオプションはスペースがどのように扱われるかの<mode>
を制御します。有効なモードの詳細については、git-diff[1]の--color-moved-wsを参照してください。
GIT
git[1]スイートの一部