セットアップと設定
プロジェクトの取得と作成
基本的なスナップショット作成
ブランチとマージ
プロジェクトの共有と更新
検査と比較
パッチ適用
デバッグ
メール
外部システム
サーバー管理
ガイド
- gitattributes
- コマンドラインインターフェースの慣習
- 日常のGit
- よくある質問 (FAQ)
- 用語集
- フック
- gitignore
- gitmodules
- リビジョン
- サブモジュール
- チュートリアル
- ワークフロー
- 全てのガイド...
管理
プラミングコマンド
- 2.48.1 → 2.49.0 変更なし
-
2.48.0
2025-01-10
- 2.46.1 → 2.47.2 変更なし
-
2.46.0
2024-07-29
-
2.45.3
2024-11-26
- 2.45.1 → 2.45.2 変更なし
-
2.45.0
2024-04-29
- 2.44.1 → 2.44.3 変更なし
-
2.44.0
2024-02-23
- 2.43.1 → 2.43.6 変更なし
-
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.37.3 → 2.38.5 変更なし
-
2.37.2
2022-08-11
- 2.36.1 → 2.37.1 変更なし
-
2.36.0
2022-04-18
- 2.35.1 → 2.35.8 変更なし
-
2.35.0
2022-01-24
- 2.34.1 → 2.34.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.1 → 2.19.6 変更なし
-
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-index および git diff-tree と同じです。
オプション
-
-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)
-
差分アルゴリズムを選択します。バリアントは以下のとおりです。
例えば、
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
のいずれかを指定できます。 -
--no-color
-
色付き差分をオフにします。これは
--color=never
と同じです。 -
--color-moved[=<mode>]
-
移動したコード行は異なる色で表示されます。オプションが指定されていない場合、<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
の移動検出を実行する際に空白文字を無視する方法を設定します。これらのモードはカンマ区切りリストとして指定できます。-
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
となり、以下のいずれかである必要があります。最初のモードの名前にもかかわらず、有効な場合、すべてのモードで変更された部分を強調するために色が使用されることに注意してください。
-
--word-diff-regex=<regex>
-
空白以外の連続を単語と見なす代わりに、<regex> を使用して単語を決定します。既に有効でない限り、
--word-diff
も意味します。<regex> の重複しないすべてのマッチが単語と見なされます。これらのマッチ間のものは空白と見なされ、差分を検出する目的では無視されます(!)。すべての非空白文字にマッチするように、正規表現に
|[^[:space:]]
を追加することをお勧めします。改行を含むマッチは、改行で黙って切り詰められます(!)。例えば、
--word-diff-regex=.
は各文字を単語として扱い、それに従って文字単位で差分を表示します。正規表現は、差分ドライバーまたは設定オプションを介しても設定できます。gitattributes[5] または git-config[1] を参照してください。明示的に指定すると、あらゆる差分ドライバーまたは設定を上書きします。差分ドライバーは設定を上書きします。
-
--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> 内のglobパターンの順序によって決定されます。最初のパターンに一致するパス名を持つすべてのファイルが最初に出力され、2番目のパターンに一致するパス名を持つすべてのファイル(ただし最初のパターンには一致しない)が次に出力され、以降同様です。どのパターンにも一致しないパス名を持つすべてのファイルは、ファイルの最後に暗黙的なマッチオールパターンがあるかのように、最後に出力されます。複数のパス名が同じランク(同じパターンに一致するが、それ以前のパターンには一致しない)を持つ場合、それらの相対的な出力順序は通常の順序になります。
<orderfile> は次のようにパースされます。
-
空行は無視されるため、可読性のための区切り文字として使用できます。
-
ハッシュ("
#
")で始まる行は無視されるため、コメントとして使用できます。パターンがハッシュで始まる場合は、冒頭にバックスラッシュ("\
")を追加してください。 -
その他の各行には単一のパターンが含まれます。
パターンは
fnmatch
(3) でFNM_PATHNAME
フラグなしで使用されるパターンと同じ構文とセマンティクスを持ちますが、パス名の最後のコンポーネントをいくつ削除してもパターンに一致する場合は、パス名もパターンに一致します。たとえば、パターン "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
-
プロジェクトのサブディレクトリから実行した場合、このオプションを使用すると、そのディレクトリ外の変更を除外させ、パス名を相対的に表示させることができます。サブディレクトリにいない場合(例:bareリポジトリの場合)、<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] の「カスタムハンクヘッダーの定義」を参照)。 -
--exit-code
-
プログラムを
diff
(1) と同様の終了コードで終了させます。つまり、差分があった場合は1で終了し、差分がない場合は0で終了します。 -
--quiet
-
プログラムのすべての出力を無効にします。
--exit-code
を暗黙的に指定します。終了コードが信頼されていない外部の差分ヘルパーの実行を無効にします。つまり、それぞれの設定オプションdiff.trustExitCode
またはdiff.
<driver>.trustExitCode
、または環境変数GIT_EXTERNAL_DIFF_TRUST_EXIT_CODE
が false の場合です。 -
--ext-diff
-
外部の差分ヘルパーの実行を許可します。gitattributes[5] で外部の差分ドライバーを設定した場合、git-log[1] などと一緒にこのオプションを使用する必要があります。
-
--no-ext-diff
-
外部の差分ドライバーを禁止します。
-
--textconv
-
--no-textconv
-
バイナリファイルの比較時に外部のテキスト変換フィルターの実行を許可(または禁止)します。詳細はgitattributes[5] を参照してください。textconvフィルターは通常、一方向の変換であるため、生成される差分は人間が読める形式には適していますが、適用することはできません。このため、textconvフィルターはデフォルトではgit-diff[1] および git-log[1] のみに有効で、git-format-patch[1] や差分のプラミングコマンドには有効ではありません。
-
--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
- -0
-
それぞれ「ベース」バージョン、「our branch」、「their branch」に対して差分を取ります。これらのオプションを使用すると、マージされたエントリの差分は表示されません。
デフォルトでは、our branch (-2) ときれいに解決されたパスに対して差分を取ります。オプション -0 を指定すると、マージされていないエントリの差分出力を省略し、「Unmerged」とだけ表示させることができます。
- -c
- --cc
-
これはステージ2(our branch)、ステージ3(their branch)、および作業ツリーファイルを比較し、diff-tree がこれらのフラグでマージコミットを表示する方法と同様に、結合された差分を出力します。
-
-q
-
存在しないファイルに対しても沈黙を保ちます。
生の出力フォーマット
git-diff-index
、git-diff-tree
、git-diff-files
および git diff --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}。
-
スペース。
-
ステータス、その後にオプションの「スコア」数値。
-
-z
オプションが使用されている場合はタブまたはNUL。 -
"src" のパス
-
-z
オプションが使用されている場合はタブまたはNUL。CまたはRの場合にのみ存在します。 -
"dst" のパス。CまたはRの場合にのみ存在します。
-
レコードを終了するために、
-z
オプションが使用されている場合はLFまたは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
オプションが生成するものは、従来の差分フォーマットとは少し異なります。
-
これは、次のような「git diff」ヘッダーが前置されます。
diff --git a/file1 b/file2
a/
とb/
のファイル名は、名前変更/コピーが関与しない限り同じです。特に、作成または削除の場合でも、/dev/null
がa/
またはb/
のファイル名の代わりに使用されることはありません。名前変更/コピーが関与する場合、
file1
とfile2
はそれぞれ、名前変更/コピー元のファイル名と、名前変更/コピーによって生成されるファイル名を示します。 -
その後には1つ以上の拡張ヘッダー行が続きます。
old mode <mode> new mode <mode> 削除されたファイルモード <mode> 新規ファイルモード <mode> コピー元 <path> コピー先 <path> 名前変更元 <path> 名前変更先 <path> 類似度インデックス <number> 非類似度インデックス <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
-
ハンクヘッダーは、そのハンクが適用される関数の名前を示します。これを特定の言語に合わせて調整する方法の詳細については、gitattributes[5] の「カスタムハンクヘッダーの定義」を参照してください。
結合差分フォーマット
任意の差分生成コマンドは、マージを表示する際に 結合差分 を生成するために -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> 新規ファイルモード <mode> 削除されたファイルモード <mode>,<mode>mode <mode>,<mode>..<mode>
行は、少なくとも1つの <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ヘッダーが表示されます。--- a/file --- a/file --- a/file +++ b/file
この拡張フォーマットは、名前変更またはコピー検出がアクティブな場合に、異なる親におけるファイルの元の名前を確認できるため、有用です。
-
チャンクヘッダーのフォーマットは、誤って
patch -p1
に渡されるのを防ぐために変更されています。結合差分フォーマットはマージコミットの変更をレビューするために作成されたものであり、適用されることを意図していませんでした。この変更は、拡張 index ヘッダーの変更に似ています。@@@ <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 とどのように異なるかを示します。各 fileN ごとに1つの列が出力行に前置され、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
git[1] スイートの一部