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

名前

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

概要

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>…​]

説明

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

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

オプション

<patch>…​

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

--stat

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

--numstat

--stat と同様ですが、追加および削除された行数を小数点表記で、パス名を省略せずに表示し、より機械で扱いやすくします。バイナリファイルの場合、0 0 と表示する代わりに 2 つの - を出力します。"apply" をオフにします。

--summary

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

--check

パッチを適用する代わりに、パッチが現在のワーキングツリーおよび/またはインデックスファイルに適用可能であるかを確認し、エラーを検出します。"apply" をオフにします。

--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>

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

-C<n>

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

--unidiff-zero

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

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

--apply

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

--no-add

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

--allow-binary-replacement
--binary

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

--exclude=<path-pattern>

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

--include=<path-pattern>

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

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

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

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

--whitespace=<action>

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

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

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

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

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

  • fix は、いくつかのそのようなエラーに対して警告を出力し、それらを修正した後にパッチを適用します (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 patch の代替として使用されている場合の現在の作業ディレクトリ) に影響するパッチは、誤り (またはいたずら) として拒否されます。

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

--allow-empty

差分を含まないパッチに対してエラーを返しません。これには空のパッチとコミットテキストのみのパッチが含まれます。

設定

このセクションのこの行より下のすべての内容は、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] を参照してください。

サブモジュール

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

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

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

関連項目

GIT

git[1]スイートの一部

scroll-to-top