セットアップと設定
プロジェクトの取得と作成
基本的なスナップショット
ブランチとマージ
プロジェクトの共有と更新
検査と比較
パッチ適用
デバッグ
メール
外部システム
サーバー管理
- 2.49.1 → 2.50.1 変更なし
- 2.49.0 変更なし
- 2.48.1 → 2.48.2 変更なし
-
2.48.0
2025-01-10
- 2.47.1 → 2.47.3 変更なし
-
2.47.0
2024-10-06
- 2.46.1 → 2.46.4 変更なし
-
2.46.0
2024-07-29
- 2.45.4 変更なし
-
2.45.3
2024-11-26
- 2.45.1 → 2.45.2 変更なし
-
2.45.0
2024-04-29
- 2.44.1 → 2.44.4 変更なし
-
2.44.0
2024-02-23
- 2.43.2 → 2.43.7 変更なし
-
2.43.1
2024-02-09
-
2.43.0
2023-11-20
- 2.42.2 → 2.42.4 変更なし
-
2.42.1
2023-11-02
-
2.42.0
2023-08-21
- 2.41.1 → 2.41.3 変更なし
-
2.41.0
2023-06-01
- 2.40.1 → 2.40.4 変更なし
-
2.40.0
2023-03-12
- 2.39.1 → 2.39.5 変更なし
-
2.39.0
2022-12-12
- 2.38.1 → 2.38.5 変更なし
-
2.38.0
2022-10-02
- 2.37.3 → 2.37.7 変更なし
-
2.37.2
2022-08-11
- 2.36.1 → 2.37.1 変更なし
-
2.36.0
2022-04-18
- 2.34.1 → 2.35.8 変更なし
-
2.34.0
2021-11-15
- 2.33.1 → 2.33.8 変更なし
-
2.33.0
2021-08-16
- 2.32.1 → 2.32.7 変更なし
-
2.32.0
2021-06-06
- 2.31.1 → 2.31.8 変更なし
-
2.31.0
2021-03-15
- 2.30.1 → 2.30.9 変更なし
-
2.30.0
2020-12-27
- 2.29.1 → 2.29.3 変更なし
-
2.29.0
2020-10-19
- 2.28.1 変更なし
-
2.28.0
2020-07-27
- 2.25.2 → 2.27.1 変更なし
-
2.25.1
2020-02-17
-
2.25.0
2020-01-13
- 2.24.1 → 2.24.4 変更なし
-
2.24.0
2019-11-04
- 2.22.1 → 2.23.4 変更なし
-
2.22.0
2019-06-07
- 2.21.1 → 2.21.4 変更なし
-
2.21.0
2019-02-24
- 2.20.1 → 2.20.5 変更なし
-
2.20.0
2018-12-09
- 2.19.3 → 2.19.6 変更なし
-
2.19.2
2018-11-21
- 2.19.1 変更なし
-
2.19.0
2018-09-10
- 2.18.1 → 2.18.5 変更なし
-
2.18.0
2018-06-21
- 2.17.1 → 2.17.6 変更なし
-
2.17.0
2018-04-02
-
2.16.6
2019-12-06
-
2.15.4
2019-12-06
-
2.14.6
2019-12-06
-
2.13.7
2018-05-22
-
2.12.5
2017-09-22
-
2.11.4
2017-09-22
- 2.10.5 変更なし
-
2.9.5
2017-07-30
-
2.8.6
2017-07-30
- 2.7.6 変更なし
-
2.6.7
2017-05-05
-
2.5.6
2017-05-05
-
2.4.12
2017-05-05
-
2.3.10
2015-09-28
- 2.1.4 → 2.2.3 変更なし
-
2.0.5
2014-12-17
概要
git
diff
[<options>] [<commit>] [--
] [<path>…]git
diff
[<options>]--cached
[--merge-base
] [<commit>] [--
] [<path>…]git
diff
[<options>] [--merge-base
] <commit> [<commit>…] <commit> [--
] [<path>…]git
diff
[<options>] <commit>...<commit> [--
] [<path>…]git
diff
[<options>] <blob> <blob>git
diff
[<options>]--no-index
[--
] <path> <path>
説明
作業ツリーとインデックスまたはツリー間の変更、インデックスとツリー間の変更、2つのツリー間の変更、マージの結果生じる変更、2つのブロブオブジェクト間の変更、またはディスク上の2つのファイル間の変更を表示します。
git
diff
[<options>] [--
] [<path>...]-
この形式は、インデックス (次のコミットのステージング領域) に対して行った変更を表示するためのものです。言い換えれば、その差分は、Git にインデックスにさらに追加するように指示する「可能性のある」ものですが、まだ追加していません。git-add[1] を使用してこれらの変更をステージングできます。
git
diff
[<options>]--no-index
[--
] <path> <path>-
この形式は、ファイルシステム上の指定された2つのパスを比較するためのものです。Git によって制御されている作業ツリー内でコマンドを実行し、少なくとも1つのパスが作業ツリー外を指している場合、またはGit によって制御されている作業ツリー外でコマンドを実行している場合、
--no-index
オプションを省略できます。この形式は--exit-code
を含意します。 git
diff
[<options>]--cached
[--merge-base
] [<commit>] [--
] [<path>...]-
この形式は、指定された <commit> に対して、次のコミットのためにステージングした変更を表示するためのものです。通常、最新のコミットとの比較が必要なため、<commit> を指定しない場合、デフォルトで
HEAD
になります。HEAD
が存在しない場合 (例: 未誕生のブランチ) で、<commit> が指定されていない場合、すべてのステージングされた変更が表示されます。--staged
は--cached
の同義語です。--merge-base
が指定されている場合、<commit> の代わりに、<commit> とHEAD
のマージベースを使用します。git
diff
--cached
--merge-base
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
が指定されている場合、「以前」の側には2つのコミットのマージベースを使用します。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] の「範囲の指定」セクションで定義されている範囲を意味しません。
オプション
-p
-u
--patch
-
パッチを生成します (「-p でパッチテキストを生成する」を参照)。これがデフォルトです。
-s
--no-patch
-
差分生成機構からのすべての出力を抑制します。デフォルトでパッチを表示する
git
show
のようなコマンドで出力を抑制したり、エイリアスのコマンドラインで以前に指定された--patch
、--stat
のようなオプションの効果を打ち消したりするのに役立ちます。 -U
<n>--unified=
<n>-
通常の 3 行ではなく、<n> 行のコンテキストを持つ diff を生成します。
--patch
を含意します。 --output=
<file>-
標準出力ではなく、指定されたファイルに出力します。
--output-indicator-new=
<char>--output-indicator-old=
<char>--output-indicator-context=
<char>-
生成されるパッチで、新規行、古い行、コンテキスト行を示すために使用される文字を指定します。通常、それぞれ
+
、-
、' ' です。 --raw
-
差分を raw 形式で生成します。
--patch-with-raw
-
-p
--raw
の同義語。 --indent-heuristic
-
パッチを読みやすくするために diff ハンク境界をシフトするヒューリスティックを有効にします。これがデフォルトです。
--no-indent-heuristic
-
インデントヒューリスティックを無効にします。
--minimal
-
可能な限り最小の差分が生成されるように、余分な時間を費やします。
--patience
-
「patience diff」アルゴリズムを使用して差分を生成します。
--histogram
-
「ヒストグラム diff」アルゴリズムを使用して差分を生成します。
--anchored=
<text>-
「アンカー付き diff」アルゴリズムを使用して差分を生成します。
このオプションは複数回指定できます。
行がソースとデスティネーションの両方に存在し、一度だけ存在し、<text> で始まる場合、このアルゴリズムは出力に削除または追加として表示されないようにします。内部的には「patience diff」アルゴリズムを使用します。
--diff-algorithm=
(patience
|minimal
|histogram
|myers
)-
diff アルゴリズムを選択します。バリアントは以下の通りです
たとえば、
diff.algorithm
変数をデフォルト以外の値に設定している場合で、デフォルト値を使用したい場合は、--diff-algorithm=default
オプションを使用する必要があります。 --stat
[=
<width>[,
<name-width>[,
<count>]]]-
差分統計を生成します。デフォルトでは、ファイル名の部分には必要なだけスペースが使用され、残りはグラフの部分に使用されます。最大幅はターミナル幅にデフォルトで設定され、ターミナルに接続されていない場合は80列になり、<width> で上書きできます。ファイル名部分の幅は、コンマの後に別の幅 <name-width> を指定するか、
diff.statNameWidth=
<name-width> を設定することで制限できます。グラフ部分の幅は、--stat-graph-width=
<graph-width> を使用するか、diff.statGraphWidth=
<graph-width> を設定することで制限できます。--stat
または--stat-graph-width
を使用すると、統計グラフを生成するすべてのコマンドに影響しますが、diff.statNameWidth
またはdiff.statGraphWidth
を設定してもgit
format-patch
には影響しません。3番目のパラメーター <count> を指定すると、最初の <count> 行に制限され、それ以上ある場合は ... が続きます。これらのパラメータは、
--stat-width=
<width>、--stat-name-width=
<name-width>、--stat-count=
<count> を使用して個別に設定することもできます。 --compact-summary
-
ファイル作成または削除 (「new」または「gone」、オプションでシンボリックリンクの場合は
+l
) やモード変更 (それぞれ実行可能ビットの追加または削除の場合は+x
または-x
) などの拡張ヘッダー情報の簡潔な概要を差分統計に表示します。この情報は、ファイル名部分とグラフ部分の間に配置されます。--stat
を含意します。 --numstat
-
--stat
に似ていますが、追加および削除された行数を10進数表記で表示し、パス名は省略せずに表示するため、マシンが扱いやすくなります。バイナリファイルの場合、0
0
と表示する代わりに2つの-
を出力します。 --shortstat
-
変更されたファイルの総数、および追加および削除された行数を含む、
--stat
形式の最後の行のみを出力します。 -X
[<param>,...
]--dirstat
[=
<param>,...
]-
各サブディレクトリの相対的な変更量の分布を出力します。
--dirstat
の動作は、コンマ区切りのパラメータリストを渡すことでカスタマイズできます。デフォルトはdiff.dirstat
設定変数によって制御されます (git-config[1] を参照)。以下のパラメータが利用可能ですchanges
-
ソースから削除された行、または宛先に追加された行をカウントして dirstat 数を計算します。これは、ファイル内の純粋なコード移動の量を無視します。言い換えれば、ファイル内の行の並べ替えは他の変更ほどカウントされません。これは、パラメータが指定されていない場合のデフォルトの動作です。
lines
-
通常の行ベースの差分分析を行い、削除/追加された行数を合計して dirstat 数を計算します (バイナリファイルの場合、バイナリファイルには自然な行の概念がないため、代わりに64バイトのチャンクをカウントします)。これは
changes
動作よりも高価な--dirstat
動作ですが、ファイル内の並べ替えられた行も他の変更と同様にカウントします。結果の出力は、他の--*stat
オプションから得られるものと一致します。 files
-
変更されたファイルの数をカウントして dirstat 数を計算します。dirstat 分析では、変更された各ファイルが等しくカウントされます。これは、ファイルの内容をまったく参照する必要がないため、計算コストが最も低い
--dirstat
動作です。 cumulative
-
子ディレクトリの変更を親ディレクトリでもカウントします。
cumulative
を使用する場合、報告されるパーセンテージの合計が100%を超える場合があることに注意してください。デフォルト (非累積) の動作は、noncumulative
パラメータで指定できます。 - <limit>
-
整数パラメータはカットオフパーセンテージ (デフォルトは 3%) を指定します。変更のこのパーセンテージよりも貢献度が低いディレクトリは出力に表示されません。
例: 以下の設定は、変更されたファイルをカウントし、変更されたファイルの総量の10%未満のディレクトリを無視し、子ディレクトリのカウントを親ディレクトリに累積します:
--dirstat=files,10,cumulative
。 --cumulative
-
--dirstat=cumulative
の同義語。 --dirstat-by-file
[=
<param>,...
]-
--dirstat=files,
<param>,...
の同義語。 --summary
-
作成、名前変更、モード変更などの拡張ヘッダー情報の要約を出力します。
--patch-with-stat
-
-p
--stat
の同義語。 -z
-
--raw
、--numstat
、--name-only
、または--name-status
が指定されている場合、パス名を変換せず、NUL を出力フィールド区切り文字として使用します。このオプションがない場合、「異常な」文字を含むパス名は、設定変数
core.quotePath
(git-config[1] を参照) で説明されているように引用符で囲まれます。 --name-only
-
変更された各ファイルのポストイメージツリーのファイル名のみを表示します。ファイル名はしばしば UTF-8 でエンコードされています。詳細については、git-log[1] マニュアルページのエンコーディングに関する議論を参照してください。
--name-status
-
変更された各ファイルのファイル名とステータスのみを表示します。ステータス文字の意味については、
--diff-filter
オプションの説明を参照してください。--name-only
と同様に、ファイル名は通常 UTF-8 でエンコードされます。 --submodule
[=
<format>]-
サブモジュールの差分表示方法を指定します。
--submodule=short
を指定すると、short
フォーマットが使用されます。このフォーマットでは、範囲の開始コミットと終了コミットの名前のみが表示されます。--submodule
または--submodule=log
を指定すると、log
フォーマットが使用されます。このフォーマットでは、git-submodule[1]summary
のように範囲内のコミットを一覧表示します。--submodule=diff
を指定すると、diff
フォーマットが使用されます。このフォーマットでは、コミット範囲内のサブモジュールコンテンツの変更のインライン差分を表示します。デフォルトはdiff.submodule
または、設定オプションが設定されていない場合はshort
フォーマットです。 --color
[=
<when>]-
色付き差分を表示します。
--color
(つまり <when> なし) は--color=always
と同じです。<when> はalways
、never
、またはauto
のいずれかです。color.ui
およびcolor.diff
の設定で変更できます。 --no-color
-
色付き差分を無効にします。これは設定を上書きするために使用できます。
--color=never
と同じです。 --color-moved
[=
<mode>]-
移動したコード行を異なる色で表示します。
diff.colorMoved
設定で変更できます。オプションが指定されていない場合、<mode> はデフォルトでno
になり、モードが指定されていないオプションの場合はzebra
になります。モードは次のいずれかでなければなりません。no
-
移動した行はハイライトされません。
default
-
zebra
の同義語です。これは将来、より sensible なモードに変更される可能性があります。 plain
-
ある場所で追加され、別の場所で削除された行は
color.diff.newMoved
で色付けされます。同様に、差分の別の場所で追加された削除行にはcolor.diff.oldMoved
が使用されます。このモードは移動された行をすべて検出しますが、コードブロックが順列なしで移動されたかどうかを判断するためのレビューにはあまり役立ちません。 blocks
-
少なくとも20の英数字からなる移動テキストのブロックは、貪欲に検出されます。検出されたブロックは
color.diff.
(old
|new
)Moved
の色で描画されます。隣接するブロックは区別できません。 zebra
-
移動テキストのブロックは
blocks
モードと同様に検出されます。ブロックはcolor.diff.
(old
|new
)Moved
の色、またはcolor.diff.
(old
|new
)MovedAlternative
で描画されます。2つの色の間の変更は、新しいブロックが検出されたことを示します。 dimmed-zebra
-
zebra
に似ていますが、移動されたコードの興味のない部分の調光が追加で行われます。2つの隣接するブロックの境界線は興味深いと見なされ、残りは興味のない部分です。dimmed_zebra
は非推奨の同義語です。
--no-color-moved
-
移動検出をオフにします。これは設定を上書きするために使用できます。
--color-moved=no
と同じです。 --color-moved-ws=
<mode>,...
-
--color-moved
の移動検出を実行する際に、空白をどのように無視するかを設定します。diff.colorMovedWS
設定で設定できます。これらのモードはコンマ区切りのリストで指定できますno
-
移動検出を実行する際に空白文字を無視しません。
ignore-space-at-eol
-
行末の空白の変更を無視します。
ignore-space-change
-
空白の量の変更を無視します。これは行末の空白を無視し、1 つ以上の空白文字の他のすべてのシーケンスを同等と見なします。
ignore-all-space
-
行を比較する際に空白を無視します。これにより、一方の行に空白があり、もう一方の行に空白がない場合でも、違いを無視します。
allow-indentation-change
-
移動検出で最初にすべての空白を無視し、その後、空白の変更が行ごとに同じ場合にのみ、移動したコードブロックをブロックにグループ化します。これは他のモードと互換性がありません。
--no-color-moved-ws
-
移動検出を実行する際に空白を無視しません。これは設定を上書きするために使用できます。
--color-moved-ws=no
と同じです。 --word-diff
[=
<mode>]-
デフォルトでは、単語は空白で区切られます。
--word-diff-regex
を参照してください。<mode> はデフォルトでplain
であり、以下のいずれかである必要があります。最初のモード名にもかかわらず、有効な場合、すべてのモードで変更された部分をハイライトするために色が使用されることに注意してください。
--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%
は、結果において元の30%未満が残っている場合に、Git がそれを完全な書き換えと見なすことを指定します (つまり、そうでない場合、結果のパッチはコンテキスト行と混在する削除と挿入の一連の変更になります)。-M
と一緒に使用すると、完全に書き換えられたファイルも名前変更のソースと見なされ (通常、-M
は消滅したファイルのみを名前変更のソースと見なします)、数値 <n> は-B
オプションのこの側面を制御します (デフォルトは50%)。-B20%
は、ファイルのサイズの20%以上の追加と削除を含む変更が、別のファイルへの名前変更の可能性のあるソースとして検出される資格があることを指定します。 -M
[<n>]--find-renames
[=
<n>]-
名前変更を検出します。<n> が指定されている場合、それは類似度指数 (つまり、ファイルのサイズに対する追加/削除の量) の閾値です。たとえば、
-M90%
は、ファイルの90%以上が変更されていない場合に、Git が削除/追加のペアを名前変更と見なすことを意味します。%
記号がない場合、数値は小数として読み取られ、その前に小数点があります。つまり、-M5
は0.5になり、-M50%
と同じです。同様に、-M05
は-M5%
と同じです。正確な名前変更のみに検出を制限するには、-M100%
を使用します。デフォルトの類似度指数は50%です。 -C
[<n>]--find-copies
[=
<n>]-
名前変更だけでなく、コピーも検出します。
--find-copies-harder
も参照してください。<n> が指定されている場合、-M
<n> と同じ意味を持ちます。 --find-copies-harder
-
パフォーマンス上の理由から、デフォルトでは
-C
オプションは、コピーの元ファイルが同じ変更セットで変更された場合にのみコピーを検出します。このフラグは、変更されていないファイルをコピーのソース候補として検査するようコマンドに指示します。これは大規模なプロジェクトでは非常に高価な操作なので、注意して使用してください。複数の-C
オプションを指定しても同じ効果があります。 -D
--irreversible-delete
-
削除のプリイメージを省略します。つまり、ヘッダーのみを出力し、プリイメージと
/dev/null
の差分は出力しません。生成されるパッチは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
) したファイルのみを選択します。フィルタ文字の任意の組み合わせ (なしを含む) を使用できます。*
(すべてまたはなし) を組み合わせに追加すると、比較で他の基準に一致するファイルが1つでもあれば、すべてのパスが選択されます。他の基準に一致するファイルがなければ、何も選択されません。また、これらの大文字は小文字にすることで除外できます。例:
--diff-filter=ad
は追加および削除されたパスを除外します。すべての差分がすべてのタイプを持つわけではないことに注意してください。たとえば、これらのタイプの検出が無効になっている場合、コピーおよび名前変更されたエントリは表示できません。
-S
<string>-
指定された <string> のファイル内の出現回数を変更する差分 (つまり、追加/削除) を検索します。スクリプト作成者向けです。
特定のコードブロック (構造体など) を探していて、それが最初に作成されてからの履歴を知りたい場合に便利です。この機能は、プリイメージ内の興味深いブロックを繰り返し
-S
に渡し、そのブロックの最初のバージョンが見つかるまで続けます。バイナリファイルも検索されます。
-G
<regex>-
パッチテキストに <regex> に一致する追加/削除行を含む差分を検索します。
-S
<regex>--pickaxe-regex
と-G
<regex> の違いを説明するために、同じファイルで以下の差分を持つコミットを考えてみましょう+ return frotz(nitfol, two->ptr, 1, 0); ... - hit = frotz(nitfol, mf2.ptr, 1, 0);
git log -G"frotz\(nitfol" はこのコミットを表示しますが、git log -S"frotz\(nitfol" --pickaxe-regex は表示しません (その文字列の出現回数が変更されていないため)。
--text
が指定されない限り、textconv フィルタがないバイナリファイルのパッチは無視されます。詳細については、gitdiffcore[7] の pickaxe エントリを参照してください。
--find-object=
<object-id>-
指定されたオブジェクトの出現回数を変更する差分を検索します。
-S
と同様ですが、引数が異なり、特定の文字列ではなく特定のオブジェクト ID を検索します。オブジェクトはブロブまたはサブモジュールコミットにできます。
git-log
の-t
オプションを含意し、ツリーも検索します。 --pickaxe-all
-
-S
または-G
が変更を見つけた場合、<string> 内の変更を含むファイルだけでなく、その変更セット内のすべての変更を表示します。 --pickaxe-regex
-
-S
に与えられた <string> を、マッチさせる拡張 POSIX 正規表現として扱います。 -O
<orderfile>-
出力におけるファイルの表示順序を制御します。これは
diff.orderFile
設定変数を上書きします (git-config[1] を参照)。diff.orderFile
を無効にするには、-O/dev/null
を使用します。出力順序は、<orderfile> 内のグロブパターンの順序によって決定されます。最初のパターンに一致するパス名を持つすべてのファイルが最初に出力され、2番目のパターン (ただし最初のパターンには一致しない) に一致するパス名を持つすべてのファイルが次に出力され、というように続きます。どのパターンにも一致しないパス名を持つすべてのファイルは最後に出力され、ファイル末尾に暗黙のマッチオールパターンがあるかのように扱われます。複数のパス名が同じランクを持つ場合 (同じパターンに一致するが、それより前のパターンには一致しない場合)、それらの相対的な出力順序は通常の順序になります。
<orderfile> は次のように解析されます。
-
空白行は無視されるため、可読性のための区切り文字として使用できます。
-
シャープ記号(「
#
」)で始まる行は無視されるため、コメントに使用できます。パターンがシャープ記号で始まる場合は、パターンの先頭にバックスラッシュ(「\」)を追加してください。 -
その他の各行には、単一のパターンが含まれます。
パターンは、
FNM_PATHNAME
フラグなしのfnmatch
(3) で使用されるパターンと同じ構文とセマンティクスを持ちますが、パス名の末尾の任意の数のコンポーネントを削除したものがパターンに一致する場合もパターンに一致します。たとえば、パターン「foo*bar
」は「fooasdfbar
」および「foo/bar/baz/asdf
」に一致しますが、「foobarx
」には一致しません。 -
--skip-to=
<file>--rotate-to=
<file>-
指定された <file> より前のファイルを出力から破棄する (つまり、skip to)、または出力の最後に移動する (つまり、rotate to)。これらのオプションは主に
git
difftool
コマンドの使用のために考案されたものであり、それ以外ではあまり有用ではないかもしれません。 -R
-
2つの入力を交換します。つまり、インデックスまたはディスク上のファイルとツリーの内容との差分を表示します。
--relative
[=
<path>]--no-relative
-
プロジェクトのサブディレクトリから実行する場合、このオプションを使用すると、ディレクトリ外の変更を除外し、そこからの相対パス名を表示するように指示できます。サブディレクトリにいない場合 (例: ベアリポジトリ)、<path> を引数として指定することで、出力を相対的にするサブディレクトリの名前を指定できます。
--no-relative
はdiff.relative
設定オプションと以前の--relative
の両方を打ち消すために使用できます。 -a
--text
-
すべてのファイルをテキストとして扱います。
--ignore-cr-at-eol
-
比較を行う際に、行末のキャリッジリターンを無視します。
--ignore-space-at-eol
-
行末の空白の変更を無視します。
-b
--ignore-space-change
-
空白の量の変更を無視します。これは行末の空白を無視し、1 つ以上の空白文字の他のすべてのシーケンスを同等と見なします。
-w
--ignore-all-space
-
行を比較する際に空白を無視します。これにより、一方の行に空白があり、もう一方の行に空白がない場合でも、違いを無視します。
--ignore-blank-lines
-
すべての行が空白である変更を無視します。
-I
<regex>--ignore-matching-lines=
<regex>-
すべての行が<regex>に一致する変更を無視します。このオプションは複数回指定できます。
--inter-hunk-context=
<number>-
diff のハンク間のコンテキストを指定された<number>行まで表示し、互いに近いハンクを結合します。設定オプションが設定されていない場合、デフォルトは
diff.interHunkContext
または0です。 -W
--function-context
-
各変更について、関数全体をコンテキスト行として表示します。関数名は、
git
diff
がパッチのハンクヘッダーを決定する方法と同じ方法で決定されます (gitattributes[5] の「カスタムハンクヘッダーの定義」を参照)。 --exit-code
-
diff
(1) と同様の終了コードでプログラムを終了させます。つまり、差分がある場合は1で終了し、差分がない場合は0で終了します。 --quiet
-
プログラムのすべての出力を無効にします。
--exit-code
を含意します。終了コードが信頼できない外部差分ヘルパー (つまり、それぞれの設定オプションdiff.trustExitCode
またはdiff.
<driver>.trustExitCode
または環境変数GIT_EXTERNAL_DIFF_TRUST_EXIT_CODE
が false であるもの) の実行を無効にします。 --ext-diff
-
外部のdiffヘルパーの実行を許可します。gitattributes[5]で外部diffドライバーを設定した場合、git-log[1]とその仲間と一緒にこのオプションを使用する必要があります。
--no-ext-diff
-
外部diffドライバーの使用を禁止します。
--textconv
--no-textconv
-
バイナリファイルを比較する際に、外部テキスト変換フィルターを実行することを許可 (または不許可) します。詳細については gitattributes[5] を参照してください。textconv フィルターは通常一方向の変換であるため、結果の差分は人間が読める形式ですが、適用することはできません。このため、textconv フィルターはデフォルトでは git-diff[1] および git-log[1] でのみ有効になっており、git-format-patch[1] や diff プランミングコマンドでは有効になっていません。
--ignore-submodules
[=
(none
|untracked
|dirty
|all
)]-
差分生成時にサブモジュールへの変更を無視します。
all
がデフォルトです。none
を使用すると、サブモジュールに追跡されていないファイルまたは変更されたファイルが含まれている場合、あるいはそのHEAD
がスーパープロジェクトに記録されているコミットと異なる場合に、サブモジュールが変更されたと見なされます。これは、git-config[1] または gitmodules[5] のignore
オプションの設定を上書きするために使用できます。untracked
が使用されている場合、サブモジュールは追跡されていないコンテンツのみが含まれる場合はダーティと見なされません (ただし、変更されたコンテンツはスキャンされます)。dirty
を使用すると、サブモジュールの作業ツリーへのすべての変更が無視され、スーパープロジェクトに保存されているコミットへの変更のみが表示されます (これは1.7.0までの動作でした)。all
を使用すると、サブモジュールへのすべての変更が非表示になります。 --src-prefix=
<prefix>-
"a/" の代わりに指定されたソース <prefix> を表示します。
--dst-prefix=
<prefix>-
"b/" の代わりに指定された宛先 <prefix> を表示します。
--no-prefix
-
ソースまたは宛先のプレフィックスを表示しません。
--default-prefix
-
デフォルトのソースおよび宛先プレフィックス ("a/" および "b/") を使用します。これは、
diff.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
を使用した場合の「私たちのブランチ」 (ステージ #2)、または -
-3
または--theirs
を使用した場合の「彼らのブランチ」 (ステージ #3)。
インデックスには、未マージのエントリに対してのみこれらのステージが含まれます。つまり、競合を解決している間のみです。詳細については、git-read-tree[1] の「3方向マージ」セクションを参照してください。
-
-0
-
未マージのエントリの差分出力を省略し、「Unmerged」のみを表示します。作業ツリーとインデックスを比較する場合にのみ使用できます。
- <path>...
-
<path> パラメータが指定された場合、差分を指定されたパスに限定するために使用されます (ディレクトリ名を指定すると、その下のすべてのファイルの差分が得られます)。
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" 数値が続く。
-
-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
(git-config[1] を参照) の説明に従って引用符で囲まれます。-z
を使用すると、ファイル名はそのまま出力され、行は NUL バイトで終了します。
マージの差分形式
git-diff-tree
、git-diff-files
、および git-diff
--raw
は、マージコミットに対しても差分出力を生成するために -c
または --cc
オプションを受け付けることができます。出力は、上記の形式とは以下の点で異なります。
-
各親ごとにコロンがある
-
より多くの"src"モードと"src"sha1がある
-
ステータスは各親のステータス文字を連結したものである
-
オプションの「スコア」数値はない
-
タブ区切りのファイルパス名
-c
および --cc
の場合、ファイルが履歴のいずれかの側で名前変更された場合でも、宛先または最終パスのみが表示されます。--combined-all-paths
の場合、各親のパス名に続いてマージコミットのパス名が表示されます。
--combined-all-paths
なしの -c
と --cc
の例
::100644 100644 100644 fabadb8 cc95eb0 4866510 MM desc.c ::100755 100755 100755 52b7a2d 6d1ac04 d2ac7d7 RM bar.sh ::100644 100644 100644 e07d6c5 9042e82 ee91881 RR phooey.c
--combined-all-paths
を -c
または --cc
のいずれかに加えた場合の例
::100644 100644 100644 fabadb8 cc95eb0 4866510 MM desc.c desc.c desc.c ::100755 100755 100755 52b7a2d 6d1ac04 d2ac7d7 RM foo.sh bar.sh bar.sh ::100644 100644 100644 e07d6c5 9042e82 ee91881 RR fooey.c fuey.c phooey.c
結合差分は、すべての親から変更されたファイルのみをリストすることに注意してください。
-p によるパッチテキストの生成
git-diff[1]、git-log[1]、git-show[1]、git-diff-index[1]、git-diff-tree[1]、または git-diff-files[1] を -p
オプションで実行すると、パッチテキストが生成されます。GIT_EXTERNAL_DIFF
および GIT_DIFF_OPTS
環境変数 (git[1] を参照)、および diff
属性 (gitattributes[5] を参照) を介してパッチテキストの作成をカスタマイズできます。
-p
オプションが生成するものは、従来のdiff形式とは少し異なります。
-
以下のような"git diff"ヘッダーが前に付きます
diff --git a/file1 b/file2
名前変更/コピーが関係しない限り、
a/
およびb/
のファイル名は同じです。特に、作成または削除の場合でも、/dev/null
はa/
またはb/
のファイル名の代わりに使用されません。リネーム/コピーが関与する場合、
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/
のプレフィックスは含まれません。類似度指数は変更されていない行のパーセンテージであり、非類似度指数は変更された行のパーセンテージです。これは小数点以下を切り捨てた整数で、その後にパーセント記号が続きます。したがって、100% の類似度指数は2つの等しいファイルに予約されており、100% の非類似度は、古いファイルからの行が新しいファイルにまったくないことを意味します。
インデックス行には、変更前と変更後のブロブオブジェクト名が含まれます。ファイルモードが変更されない場合は<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ヘッダの定義」を参照してください。
統合diff形式
すべての差分生成コマンドは、マージを表示する際に -c
または --cc
オプションを受け入れて、「結合差分」を生成できます。これは、git-diff[1] または git-show[1] でマージを表示する場合のデフォルト形式です。また、これらのコマンドのいずれかに適切な --diff-merges
オプションを指定して、特定の形式で差分を強制的に生成できることにも注意してください。
"結合差分"形式は次のようになります
diff --combined describe.c index fabadb8,cc95eb0..4866510 --- a/describe.c +++ b/describe.c @@@ -98,20 -98,12 +98,20 @@@ return (a_date > b_date) ? -1 : (a_date == b_date) ? 0 : 1; } - static void describe(char *arg) -static void describe(struct commit *cmit, int last_one) ++static void describe(char *arg, int last_one) { + unsigned char sha1[20]; + struct commit *cmit; struct commit_list *list; static int initialized = 0; struct commit_name *n; + if (get_sha1(arg, sha1) < 0) + usage(describe_usage); + cmit = lookup_commit_reference(sha1); + if (!cmit) + usage(describe_usage); + if (!initialized) { initialized = 1; for_each_ref(get_name);
-
-c
オプションが使用された場合、次のような「git diff」ヘッダーが前に付きます。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> 行は、少なくとも1つの <mode> が他と異なる場合にのみ表示されます。検出されたコンテンツ移動 (名前変更およびコピー検出) に関する情報を持つ拡張ヘッダーは、2つの <tree-ish> の差分で動作するように設計されており、結合差分形式では使用されません。 -
その後に、2行のfrom-file/to-fileヘッダーが続きます。
--- a/file +++ b/file
従来のunified diff形式の2行ヘッダーと同様に、
/dev/null
は作成または削除されたファイルを示すために使用されます。ただし、--combined-all-paths オプションが指定された場合、2行のfrom-file/to-fileではなく、N+1行のfrom-file/to-fileヘッダーが表示されます。ここでNはマージコミットの親の数です。
--- a/file --- a/file --- a/file +++ b/file
この拡張形式は、名前変更またはコピー検出が有効な場合に、異なる親におけるファイルの元の名前を表示できるため便利です。
-
チャンクヘッダー形式は、誤って
patch
-p1
にフィードされないように変更されました。結合差分形式はマージコミットの変更をレビューするために作成されたものであり、適用することを意図したものではありません。この変更は、拡張 index ヘッダーの変更に似ています。@@@ <from-file-range> <from-file-range> <to-file-range> @@@
結合差分形式のチャンクヘッダーには、(親の数 + 1)個の
@
文字があります。
従来の unified 差分形式が、-
(マイナス — A には存在するが B で削除)、+
(プラス — A には存在しないが B に追加)、または "
"
(スペース — 変更なし) の接頭辞を持つ単一の列で2つのファイル A と B を示すのに対し、この形式は2つ以上のファイル file1、file2 などと1つのファイル X を比較し、X が各 fileN とどのように異なるかを示します。各 fileN の列が出力行の前に付けられ、X の行がそれとどのように異なるかを示します。
カラム N の -
文字は、その行が fileN に存在するが結果には存在しないことを意味します。カラム N の +
文字は、その行が結果に存在し、fileN にその行がないことを意味します (つまり、その親の観点から、その行が追加された)。
上記の出力例では、関数シグネチャが両方のファイルから変更されています (そのため、file1 と file2 の両方から2つの -
削除があり、さらに ++
は追加された1行が file1 または file2 のいずれにも存在しないことを意味します)。また、8行は file1 と同じですが、file2 には存在しません (そのため +
が接頭辞として付けられています)。
git
diff-tree
-c
で表示される場合、マージコミットの親とマージ結果を比較します (つまり、file1..fileN は親です)。git
diff-files
-c
で表示される場合、2つの未解決のマージ親と作業ツリーファイルを比較します (つまり、file1 はステージ2、別名「our version」、file2 はステージ3、別名「their version」です)。
その他の差分形式
--summary
オプションは、新しく追加、削除、名前変更、およびコピーされたファイルを記述します。--stat
オプションは diffstat
(1) グラフを出力に追加します。これらのオプションは -p
などの他のオプションと組み合わせることができ、人間が見ることを意図しています。
名前変更またはコピーを含む変更を表示する場合、--stat
出力は、パス名の共通のプレフィックスとサフィックスを結合してパス名をコンパクトにフォーマットします。たとえば、arch/i386/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)
-
トピックブランチとマスターブランチの先端間の変更。
-
上記と同じです。
-
トピックブランチがマスターブランチから分岐して以来、マスターブランチで発生した変更。
-
- 差分出力の制限
-
$ git diff --diff-filter=MRC (1) $ git diff --name-status (2) $ git diff arch/i386 include/asm-i386 (3)
-
変更、名前変更、コピーのみを表示し、追加または削除は表示しません。
-
名前と変更の種類のみを表示し、実際の差分出力は表示しません。
-
差分出力を指定されたサブツリーに限定します。
-
- 差分出力の加工
-
$ git diff --find-copies-harder -B -C (1) $ git diff -R (2)
-
名前変更、コピー、完全な書き換えを検出するためにより多くのサイクルを費やします (非常に高価です)。
-
差分を逆順に出力します。
-
設定
このセクションのこの行より下のすべての内容は、git-config[1] ドキュメントから選択的に含まれています。内容はそちらで見られるものと同じです。
diff.autoRefreshIndex
-
git
diff
を使用して作業ツリーファイルと比較する場合、stat-only の変更は変更と見なしません。代わりに、git
update-index
--refresh
をサイレントに実行して、作業ツリー内のコンテンツがインデックス内のコンテンツと一致するパスのキャッシュされた stat 情報を更新します。このオプションはデフォルトでtrue
です。これはgit
diff
Porcelain にのみ影響し、git
diff-files
などの下位レベルのdiff
コマンドには影響しないことに注意してください。 diff.dirstat
-
git
diff
などの--dirstat
オプションのデフォルト動作を指定する、コンマ区切りの--dirstat
パラメータのリスト。デフォルトはコマンドラインで上書きできます (--dirstat=
<param>,...
を使用)。フォールバックのデフォルト (diff.dirstat
で変更されていない場合) はchanges,noncumulative,3
です。以下のパラメータが利用可能です。changes
-
ソースから削除された行、または宛先に追加された行をカウントして dirstat 数を計算します。これは、ファイル内の純粋なコード移動の量を無視します。言い換えれば、ファイル内の行の並べ替えは他の変更ほどカウントされません。これは、パラメータが指定されていない場合のデフォルトの動作です。
lines
-
通常の行ベースの差分分析を行い、削除/追加された行数を合計して dirstat 数を計算します (バイナリファイルの場合、バイナリファイルには自然な行の概念がないため、代わりに64バイトのチャンクをカウントします)。これは
changes
動作よりも高価な--dirstat
動作ですが、ファイル内の並べ替えられた行も他の変更と同様にカウントします。結果の出力は、他の--*stat
オプションから得られるものと一致します。 files
-
変更されたファイルの数をカウントして dirstat 数を計算します。dirstat 分析では、変更された各ファイルが等しくカウントされます。これは、ファイルの内容をまったく参照する必要がないため、計算コストが最も低い
--dirstat
動作です。 cumulative
-
子ディレクトリの変更を親ディレクトリでもカウントします。
cumulative
を使用する場合、報告されるパーセンテージの合計が100%を超える場合があることに注意してください。デフォルト (非累積) の動作は、noncumulative
パラメータで指定できます。 - <limit>
-
整数パラメータはカットオフパーセンテージ (デフォルトは 3%) を指定します。変更のこのパーセンテージよりも貢献度が低いディレクトリは出力に表示されません。
例: 以下の設定は、変更されたファイルをカウントし、変更されたファイルの総量の10%未満のディレクトリを無視し、子ディレクトリのカウントを親ディレクトリに累積します:
files,10,cumulative
。 diff.statNameWidth
-
--stat
出力におけるファイル名部分の幅を制限します。設定されている場合、format-patch
を除く、--stat
出力を生成するすべてのコマンドに適用されます。 diff.statGraphWidth
-
--stat
出力におけるグラフ部分の幅を制限します。設定されている場合、format-patch
を除く、--stat
出力を生成するすべてのコマンドに適用されます。 diff.context
-
デフォルトの3行ではなく、<n> 行のコンテキストで差分を生成します。この値は
-U
オプションによって上書きされます。 diff.interHunkContext
-
差分ハンク間のコンテキストを指定された行数まで表示し、互いに近いハンクを結合します。この値は
--inter-hunk-context
コマンドラインオプションのデフォルトとして機能します。 diff.external
-
この設定変数が設定されている場合、差分生成は内部差分機構ではなく、指定されたコマンドを使用して実行されます。
GIT_EXTERNAL_DIFF
環境変数で上書きできます。このコマンドは git[1] の「git Diff」に記述されているパラメータで呼び出されます。注: 一部のファイルに対してのみ外部差分プログラムを使用したい場合は、代わりに gitattributes[5] を使用するとよいでしょう。 diff.trustExitCode
-
このブール値が
true
に設定されている場合、diff.external
コマンドは、入力ファイルが等しいと見なす場合は終了コード0を、異なる場合は終了コード1を返すことが期待されます。これはdiff
(1) と同様です。デフォルトであるfalse
に設定されている場合、コマンドは等しいかどうかに関わらず終了コード0
を返すことが期待されます。その他の終了コードは Git に致命的なエラーを報告させます。 diff.ignoreSubmodules
-
--ignore-submodules
のデフォルト値を設定します。これはgit
diff
Porcelain にのみ影響し、git
diff-files
などの下位レベルのdiff
コマンドには影響しないことに注意してください。git
checkout
およびgit
switch
も、未コミットの変更を報告する際にこの設定を尊重します。all
に設定すると、通常status.submoduleSummary
が設定されている場合にgit
commit
およびgit
status
によって表示されるサブモジュールサマリーが無効になりますが、--ignore-submodules
コマンドラインオプションで上書きされない限り。git
submodule
コマンドはこの設定の影響を受けません。デフォルトでは、追跡されていないサブモジュールが無視されるように untracked に設定されています。 diff.mnemonicPrefix
-
設定されている場合、
git
diff
は比較対象に応じて標準のa/
とb/
とは異なるプレフィックスペアを使用します。この設定が有効な場合、逆差分出力もプレフィックスの順序を入れ替えます。 diff.noPrefix
-
設定されている場合、
git
diff
はソースまたは宛先のプレフィックスを表示しません。 diff.srcPrefix
-
設定されている場合、
git
diff
はこのソースプレフィックスを使用します。デフォルトはa/
です。 diff.dstPrefix
-
設定されている場合、
git
diff
はこの宛先プレフィックスを使用します。デフォルトはb/
です。 diff.relative
-
true
に設定すると、git
diff
はディレクトリ外の変更を表示せず、カレントディレクトリからの相対パス名を表示します。 diff.orderFile
-
差分内のファイルの順序を指定するファイル。
-O
オプションを参照してください。diff.orderFile
が相対パス名の場合、作業ツリーのトップからの相対パスとして扱われます。 diff.renameLimit
-
コピー/名前変更検出の網羅的な部分で考慮するファイルの数。
git
diff
オプション-l
と同等です。設定されていない場合、現在のデフォルト値は1000です。名前変更検出が無効になっている場合、この設定は効果がありません。 diff.renames
-
Git が名前変更を検出するかどうか、およびその方法。
false
に設定すると、名前変更検出は無効になります。true
に設定すると、基本的な名前変更検出が有効になります。copies
またはcopy
に設定すると、Git はコピーも検出します。デフォルトはtrue
です。これは git-diff[1] や git-log[1] のようなgit
diff
Porcelain にのみ影響し、git-diff-files[1] のような下位レベルのコマンドには影響しないことに注意してください。 diff.suppressBlankEmpty
-
空の出力行の前にスペースを出力する標準動作を抑制するためのブール値です。デフォルトは
false
です。 diff.submodule
-
サブモジュールの差分を表示するフォーマットを指定します。
short
フォーマットは、範囲の開始と終了のコミット名のみを表示します。log
フォーマットは、git-submodule[1]summary
と同様に範囲内のコミットをリストします。diff
フォーマットは、サブモジュールの変更内容のインライン差分を表示します。デフォルトはshort
です。 diff.wordRegex
-
単語単位の差分計算を実行する際に、「単語」を決定するために使用される POSIX 拡張正規表現。正規表現に一致する文字シーケンスは「単語」であり、他のすべての文字は無視できる空白です。
diff.
<driver>.command
-
カスタム差分ドライバコマンド。詳細は gitattributes[5] を参照してください。
diff.
<driver>.trustExitCode
-
このブール値が
true
に設定されている場合、diff.
<driver>.command
コマンドは、入力ファイルが等しいと判断した場合は終了コード 0 を、異なると判断した場合は 1 を返すことが期待されます(diff
(1) と同様)。デフォルトであるfalse
に設定されている場合、コマンドは等しいかどうかに関わらず終了コード 0 を返すことが期待されます。その他の終了コードは、Git に致命的なエラーを報告させます。 diff.
<driver>.xfuncname
-
差分ドライバが hunk ヘッダを認識するために使用する正規表現。組み込みのパターンも使用できます。詳細は gitattributes[5] を参照してください。
diff.
<driver>.binary
-
このオプションを
true
に設定すると、差分ドライバはファイルをバイナリとして扱います。詳細は gitattributes[5] を参照してください。 diff.
<driver>.textconv
-
差分ドライバがファイルのテキスト変換バージョンを生成するために呼び出すコマンド。変換の結果は、人間が読める差分を生成するために使用されます。詳細は gitattributes[5] を参照してください。
diff.
<driver>.wordRegex
-
差分ドライバが行内の単語を分割するために使用する正規表現。詳細は gitattributes[5] を参照してください。
diff.
<driver>.cachetextconv
-
このオプションを
true
に設定すると、差分ドライバはテキスト変換出力をキャッシュします。詳細は gitattributes[5] を参照してください。 diff.indentHeuristic
-
このオプションを
false
に設定すると、パッチを読みやすくするために差分 hunk の境界をシフトするデフォルトのヒューリスティックが無効になります。 diff.algorithm
-
diff アルゴリズムを選択します。バリアントは以下の通りです
diff.wsErrorHighlight
-
差分の
context
、old
、new
行の空白エラーを強調表示します。複数の値はカンマで区切られます。none
は以前の値をリセットし、default
はリストをnew
にリセットし、all
はold,new,context
の略です。空白エラーはcolor.diff.whitespace
で色付けされます。コマンドラインオプション--ws-error-highlight=
<kind> はこの設定を上書きします。 diff.colorMoved
-
有効な <mode> または
true
の値に設定すると、差分内の移動した行が異なる色で表示されます。有効なモードの詳細は--color-moved
を参照してください。単にtrue
に設定すると、デフォルトの色モードが使用されます。false
に設定すると、移動した行は色付けされません。 diff.colorMovedWS
-
diff.colorMoved
設定などを使用して移動した行が色付けされる場合、このオプションはスペースの扱い方を制御します。有効なモードの詳細は、git-diff[1] の--color-moved-ws
を参照してください。
GIT
git[1]スイートの一部