Git
English ▾ トピック ▾ 最新版 ▾ 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>…​]

説明

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

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

オプション

<patch>…​

パッチを読み込むファイル。- を使用して標準入力から読み込むことができます。

--stat

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

--numstat

--stat と似ていますが、追加および削除された行数を10進表記で表示し、パス名を省略せずに表示することで、マシンフレンドリーになります。バイナリファイルの場合、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 が指定されていない場合に無視されます。--cached--3way など、他のオプションによって--index が暗黙的に指定される場合があります。

-3
--3way

パッチが適用されるはずのblobの識別情報を記録しており、それらのblobがローカルで利用可能な場合、3方向マージを試みます。ユーザーが解決できるように、作業ツリー内のファイルに競合マーカーを残す場合があります。このオプションは、--cached オプションが使用されていない限り、--index オプションを意味し、--reject オプションとは互換性がありません。--cached オプションで使用した場合、競合はキャッシュの上位ステージに残ります。

--ours
--theirs
--union

ファイルに競合を残す代わりに、行の私たちの(または彼らの、または両方の)側に有利に競合を解決します。--3wayが必要です。

--build-fake-ancestor=<file>

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

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

-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行のコンテキストを持つ統合diffであることを想定しています。これは優れた安全対策を提供しますが、--unified=0で生成されたdiffを適用すると機能しなくなります。これらのチェックを回避するには、--unidiff-zeroを使用します。

上記で述べた理由から、コンテキストのないパッチの使用はお勧めしません。

--apply

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

--no-add

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

--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は同義語です。以前は末尾の空白文字のみをエラーとみなし、修正はそれらを削除すること(stripping)でしたが、最近の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

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

設定

このセクションのこの行以下のすべては、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