日本語 ▾ トピック ▾ 最新バージョン ▾ git-apply 最終更新: 2.47.0

NAME

git-apply - ファイルおよび/またはインデックスにパッチを適用する

SYNOPSIS

git apply [--stat] [--numstat] [--summary] [--check]
	  [--index | --intent-to-add] [--3way] [--ours | --theirs | --union]
	  [--apply] [--no-add] [--build-fake-ancestor=<file>] [-R | --reverse]
	  [--allow-binary-replacement | --binary] [--reject] [-z]
	  [-p<n>] [-C<n>] [--inaccurate-eof] [--recount] [--cached]
	  [--ignore-space-change | --ignore-whitespace]
	  [--whitespace=(nowarn|warn|fix|error|error-all)]
	  [--exclude=<path>] [--include=<path>] [--directory=<root>]
	  [--verbose | --quiet] [--unsafe-paths] [--allow-empty] [<patch>…​]

DESCRIPTION

与えられたdiff出力(すなわち「パッチ」)を読み込み、ファイルに適用します。リポジトリのサブディレクトリから実行する場合、そのディレクトリ外のパッチが適用されるパスは無視されます。--index オプションを使用すると、パッチはインデックスにも適用され、--cached オプションを使用すると、パッチはインデックスにのみ適用されます。これらのオプションがない場合、このコマンドはパッチをファイルにのみ適用し、それらがGitリポジトリ内にあることを要求しません。

このコマンドはパッチを適用しますが、コミットは作成しません。git-format-patch[1] によって生成されたパッチや、メールで受信したパッチからコミットを作成するには、git-am[1] を使用してください。

OPTIONS

<patch>…​

パッチを読み込むファイル。標準入力から読み込むには - を使用できます。

--stat

パッチを適用する代わりに、入力のdiffstatを出力します。「適用」をオフにします。

--numstat

--stat と同様ですが、追加および削除された行数を10進数表記で表示し、パス名を省略せずに表示することで、機械処理に適した形式にします。バイナリファイルの場合、0 0 と表示する代わりに2つの - を出力します。「適用」をオフにします。

--summary

パッチを適用する代わりに、作成、名前変更、モード変更など、git diffの拡張ヘッダーから取得した情報の要約を出力します。「適用」をオフにします。

--check

パッチを適用する代わりに、パッチが現在のワーキングツリーやインデックスファイルに適用可能かを確認し、エラーを検出します。「適用」をオフにします。

--index

パッチをインデックスとワーキングツリーの両方に適用します (または --check が有効な場合は、両方にきれいに適用されることを単に確認します)。--index は、関連するパスのインデックスエントリとワーキングツリーのコピーが同一であること (その内容とファイルモードなどのメタデータが一致すること) を期待しており、たとえパッチがインデックスとワーキングツリーにそれぞれ単独でクリーンに適用される場合でも、同一でない場合はエラーを発生させることに注意してください。

--cached

ワーキングツリーを触らず、インデックスにのみパッチを適用します。--check が有効な場合、インデックスエントリにきれいに適用されることを単に確認します。

--intent-to-add

パッチをワーキングツリーにのみ適用する場合、新しいファイルを後でインデックスに追加するようマークします (git-add[1]--intent-to-add オプションを参照)。このオプションは、Gitリポジトリ内で実行されており、かつ --index が指定されていない場合にのみ有効です。--index--cached--3way などの他のオプションによって暗黙的に指定される場合があります。

-3
--3way

パッチが適用対象のブロブの識別情報を記録しており、そのブロブがローカルで利用可能な場合、3ウェイマージを試みます。これにより、ユーザーが解決できるよう、ワーキングツリーのファイルに競合マーカーが残される可能性があります。このオプションは、--cached オプションが使用されていない限り、--index オプションを暗黙的に指定します。また、--reject オプションとは互換性がありません。--cached オプションとともに使用する場合、競合はキャッシュの上位ステージに残されます。

--ours
--theirs
--union

ファイルに競合を残す代わりに、行の我々の側 (または彼らの側、あるいは両方) を優先して競合を解決します。--3way が必要です。

--build-fake-ancestor=<file>

新しい git diff の出力には、パッチの適用元となる元のバージョンを特定するのに役立つ、各ブロブの インデックス情報 が埋め込まれています。このフラグが与えられ、ブロブの元のバージョンがローカルで利用可能な場合、それらのブロブを含む一時的なインデックスを構築します。

純粋なモード変更(インデックス情報がない)が発生した場合、情報は現在のインデックスから読み取られます。

-R
--reverse

パッチを逆方向に適用します。

--reject

アトミック性のために、デフォルトでは git apply は、いくつかのハンクが適用できない場合に、パッチ全体を失敗させ、ワーキングツリーを触りません。このオプションを使用すると、適用可能なパッチの部分を適用し、拒否されたハンクは対応する *.rej ファイルに残します。

-z

--numstat が指定されている場合、パス名を変換せず、NUL終端の機械可読形式を使用します。

このオプションがない場合、「通常でない」文字を含むパス名は、設定変数 core.quotePath (「git-config[1]」を参照) に説明されているように引用符で囲まれます。

-p<n>

従来のdiffパスから <n> 個の先頭パスコンポーネント (スラッシュで区切られた) を削除します。例: -p2 の場合、a/dir/file に対するパッチは直接 file に適用されます。デフォルトは1です。

-C<n>

各変更の前後で少なくとも <n> 行の周辺コンテキストが一致することを保証します。周辺コンテキストの行数が少ない場合は、すべて一致する必要があります。デフォルトでは、コンテキストは一切無視されません。

--unidiff-zero

デフォルトでは、git apply は適用されるパッチが少なくとも1行のコンテキストを持つunidiffであることを期待します。これは優れた安全対策を提供しますが、--unified=0 で生成されたdiffを適用する際には機能しません。これらのチェックをバイパスするには --unidiff-zero を使用します。

上記で述べた理由により、コンテキストなしパッチの使用は推奨されません。

--apply

上記の「適用をオフにする」とマークされたオプションのいずれかを使用した場合、git apply は実際にパッチを適用せずに、要求された情報を読み込み、出力します。これらのフラグの後ろにこのフラグを指定すると、パッチも適用されます。

--no-add

パッチを適用するとき、パッチによって行われる追加を無視します。これは、まず2つのファイルを diff し、このオプションで結果を適用することで、ファイル間の共通部分を抽出するために使用できます。これにより、削除部分は適用されますが、追加部分は適用されません。

--allow-binary-replacement
--binary

歴史的に、ユーザーからの明示的な許可なしにバイナリパッチの適用は許可されておらず、このフラグはそのための方法でした。現在では、常にバイナリパッチの適用を許可しているため、これは何もしません。

--exclude=<path-pattern>

指定されたパスパターンに一致するファイルへの変更は適用しません。これは、特定のファイルやディレクトリを除外したいパッチセットをインポートする際に役立ちます。

--include=<path-pattern>

指定されたパスパターンに一致するファイルに変更を適用します。これは、特定のファイルやディレクトリを含めたいパッチセットをインポートする際に役立ちます。

--exclude--include パターンが使用される場合、それらはコマンドラインに現れる順序で検査され、最初のマッチが各パスへのパッチが使用されるかどうかを決定します。どのインクルード/エクスクルードパターンにも一致しないパスへのパッチは、コマンドラインにインクルードパターンがない場合はデフォルトで使用され、インクルードパターンがある場合は無視されます。

--ignore-space-change
--ignore-whitespace

パッチを適用する際、必要に応じてコンテキスト行の空白の変更を無視します。コンテキスト行は空白を保持し、--whitespace オプションの値に関わらず、空白の修正は行われません。ただし、新しい行は引き続き修正されます。

--whitespace=<action>

パッチを適用する際に、空白エラーのある新規または変更された行を検出します。空白エラーとみなされるものは core.whitespace 設定によって制御されます。デフォルトでは、行末の空白(空白のみで構成される行を含む)と、行の初期インデント内に直後にタブ文字が続く空白文字は、空白エラーとみなされます。

デフォルトでは、コマンドは警告メッセージを出力しますが、パッチは適用します。git-apply が統計目的で使用され、パッチを適用しない場合は、デフォルトで nowarn になります。

この動作を制御するために、異なる <action> 値を使用できます。

  • nowarn は、行末の空白警告をオフにします。

  • warn は、いくつかのそのようなエラーに対して警告を出力しますが、パッチをそのまま適用します (デフォルト)。

  • fix は、いくつかのそのようなエラーに対して警告を出力し、それらを修正してからパッチを適用します (strip は同義語です — このツールは以前は行末の空白文字のみをエラーとみなし、修正はそれらを strip するものでしたが、現代のGitはそれ以上のことをします)。

  • error は、いくつかのそのようなエラーに対して警告を出力し、パッチの適用を拒否します。

  • error-allerror と似ていますが、すべてのエラーを表示します。

--inaccurate-eof

特定の状況下で、一部の diff バージョンはファイル末尾の改行の欠落を正しく検出できません。その結果、そのような diff プログラムによって作成されたパッチは、不完全な行を正しく記録しません。このオプションは、このバグを回避することで、そのようなパッチの適用をサポートします。

-v
--verbose

標準エラー出力に進捗状況を報告します。デフォルトでは、現在適用されているパッチに関するメッセージのみが出力されます。このオプションを指定すると、追加情報が報告されます。

-q
--quiet

標準エラー出力を抑制します。パッチの状態や進捗に関するメッセージは出力されません。

--recount

ハンクヘッダーの行数を信頼せず、パッチを検査してそれらを推測します (例: ハンクヘッダーを適切に調整せずにパッチを編集した後など)。

--directory=<root>

すべてのファイル名に <root> を前置します。"-p" 引数も渡された場合、新しいルートを前置する前に適用されます。

例えば、a/git-gui.shb/git-gui.sh に更新すると述べられているパッチは、git apply --directory=modules/git-gui を実行することで、ワーキングツリー内の modules/git-gui/git-gui.sh ファイルに適用できます。

--unsafe-paths

デフォルトでは、ワーキングエリア外 (Git管理下のワーキングツリー、または "git apply" がGNUパッチの代替として使用される場合の現在のワーキングディレクトリ) に影響を与えるパッチは、間違い (または悪意) として拒否されます。

git apply が「より優れたGNUパッチ」として使用される場合、ユーザーは --unsafe-paths オプションを渡すことで、この安全チェックをオーバーライドできます。このオプションは、--index または --cached が使用されている場合は効果がありません。

--allow-empty

diffを含まないパッチ(空のパッチやコミットテキストのみのパッチを含む)の場合でもエラーを返しません。

CONFIGURATION

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

apply.ignoreWhitespace

change に設定されている場合、--ignore-space-change オプションと同様に、git apply に空白の変更を無視するよう指示します。no、none、never、false のいずれかに設定されている場合、git apply にすべての空白の差分を尊重するよう指示します。git-apply[1] を参照してください。

apply.whitespace

--whitespace オプションと同様に、git apply に空白の扱い方を指示します。git-apply[1] を参照してください。

SUBMODULES

パッチにサブモジュールへの変更が含まれている場合、git apply はこれらの変更を次のように扱います。

--index が明示的または暗黙的に指定されている場合、パッチを適用するためには、サブモジュールのコミットがインデックスと完全に一致する必要があります。サブモジュールのいずれかがチェックアウトされている場合、これらのチェックアウトは完全に無視されます。つまり、最新またはクリーンである必要はなく、更新もされません。

--index が指定されていない場合、パッチ内のサブモジュールコミットは無視され、対応するサブディレクトリの有無のみがチェックされ、(可能であれば)更新されます。

SEE ALSO

GIT

git[1] スイートの一部

scroll-to-top