日本語 ▾ Topics ▾ Latest version ▾ git-apply last updated in 2.47.0

NAME

git-apply - パッチをファイルやインデックスに適用する

概要

git apply [--stat] [--numstat] [--summary] [--check]
	  [--index | --intent-to-add] [--3way] [--ours | --theirs | --union]
	  [--apply] [--no-add] [--build-fake-ancestor=<ファイル>] [-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=<パス>] [--include=<パス>] [--directory=<ルート>]
	  [--verbose | --quiet] [--unsafe-paths] [--allow-empty] [<パッチ>…​]

説明

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

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

オプション

<パッチ>…​

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

--stat

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

--numstat

--stat と似ていますが、追加された行数と削除された行数を10進数で表示し、マシンフレンドリーとなるようにパス名は省略せずに表示します。バイナリファイルの場合、0 0 の代わりに - を2つ出力します。"apply"をオフにします。

--summary

Instead of applying the patch, output a condensed summary of information obtained from git diff extended headers, such as creations, renames, and mode changes. Turns off "apply".

--check

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

--index

パッチをインデックスと作業ツリーの両方に適用します(または`--check`が有効な場合、両方に問題なく適用できるかどうかを確認するだけです)。`--index`は、関連するパスのインデックスエントリと作業ツリーのコピーが同一であること(内容やファイルモードなどのメタデータが一致していること)を期待し、そうでない場合はエラーを発生させます。これは、パッチが個別にインデックスと作業ツリーの両方にきれいに適用できる場合でも同様です。

--cached

作業ツリーに触れずに、パッチをインデックスにのみ適用します。`--check`が有効な場合は、インデックスエントリにきれいに適用できるかどうかを確認するだけです。

--intent-to-add

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

-3
--3way

パッチが適用されるべきblobのIDを記録していて、それらのblobがローカルで利用可能な場合、3方向マージを試みます。これにより、ユーザーが解決するための競合マーカーが作業ツリー内のファイルに残される可能性があります。このオプションは、--cached`オプションが使用されていない限り、--index`オプションを暗黙的に指定し、--reject`オプションとは互換性がありません。--cached`オプションと一緒に使用すると、競合はキャッシュ内の高いステージに残されます。

--ours
--theirs
--union

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

--build-fake-ancestor=<ファイル>

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

純粋なモード変更(インデックス情報がない)が見つかった場合、情報は代わりに現在のインデックスから読み込まれます。

-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>行の周囲のコンテキストが一致することを確認します。周囲のコンテキストが<n>行未満の場合、すべてが一致する必要があります。デフォルトでは、コンテキストは無視されません。

--unidiff-zero

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

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

--apply

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

--no-add

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

--allow-binary-replacement
--binary

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

--exclude=<パスパターン>

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

--include=<パスパターン>

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

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

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

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

--whitespace=<アクション>

パッチを適用する際、新しく追加または変更された行にホワイトスペースエラーがないか検出します。どのようなものをホワイトスペースエラーと見なすかは、core.whitespace の設定で制御されます。デフォルトでは、行末の空白(空白だけの行も含む)や、行頭インデント部分でスペースの直後にタブが続く場合がホワイトスペースエラーとされます。

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

この動作を制御するために、異なる`<アクション>`値を使用できます:

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

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

  • ‘fix`はそのようないくつかのエラーに対して警告を出力し、それらを修正した後でパッチを適用します(`strip`は同義語です - このツールはかつて末尾の空白文字のみをエラーと見なし、修正には’stripping’(削除)が含まれていましたが、現代のGitではより多くの処理を行います)。

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

  • `error-all`は`error`に似ていますが、すべてのエラーを表示します。

--inaccurate-eof

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

-v
--verbose

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

-q
--quiet

stderr出力を抑制します。パッチのステータスや進行状況に関するメッセージは表示されません。

--recount

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

--directory=<ルート>

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

例えば、`a/git-gui.sh`を`b/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] のドキュメントから抜粋して含まれています。内容は同ドキュメントにあるものと同じです:

Warning

Missing ja/config/apply.adoc

See original version for this content.

サブモジュール

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

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

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

関連項目

GIT

Part of the git[1] suite

scroll-to-top