コンテンツにスキップ
GitTree
Git ガイド2 分で読みました

Git でパッチを作成して適用する方法

パッチは、リポジトリ間で変更をプレーン テキスト ファイルとして伝達します。ここでは、git diff または git format-patch を使用する場合、git apply または git am を使用する場合、および適用を拒否したパッチを修正する方法を説明します。

作者 Kodmora

GitTree の背後にあるソフトウェア ハウス

更新されました
  • コミット
  • リモートとプッシュ
このページでは

パッチを作成するには、コミットされていない変更の場合は `git diff > fix.patch` を実行し、最後のコミットの場合は `git format-patch -1 HEAD` を実行します。適用するには、`git apply fix.patch` または `git am 0001-my-change.patch` を実行します。 作業フォルダー内の変更のみが必要な場合は、git apply を使用します。元のコミットとそのメッセージと作成者が必要な場合は、git am を使用します。

Git パッチとは何ですか?

パッチは、どのファイルのどの行を削除および追加するかをリストしたテキスト ファイルです。これは、電子メールで修正を送信する場合、無関係なリポジトリ間で変更を移動する場合、ローカルの変更をバージョン管理外に保持する場合など、同じリモートにプッシュできない場合に適しています。あなたと他の人がリモートを共有している場合、分岐はより簡単になります。

コミットされていない変更からパッチを作成するにはどうすればよいですか?

# unstaged changes
git diff > fix.patch

# staged changes
git diff --staged > fix.patch

# everything since the last commit
git diff HEAD > fix.patch

# include binary files
git diff --binary > fix.patch

ステージングされていない新しいファイルは git diff に表示されません。最初に git add を実行してから、--staged を使用します。

コミットからパッチを作成するにはどうすればよいですか?

# the last commit
git format-patch -1 HEAD

# the last three commits, one file each
git format-patch -3

# everything on this branch that main does not have
git format-patch main..feature/search -o patches/

# all of it in a single file
git format-patch main --stdout > feature.patch

format-patch は、0001-add-search-box.patch のような名前のファイルを書き込みます。それぞれはコミットのメッセージ、作成者、日付を保持しますが、プレーンな git diff では失われます。

パッチを適用するにはどうすればよいですか?

まず確認してください。これら 2 つのコマンドは何も変更しません。

# what it touches
git apply --stat fix.patch

# whether it will apply
git apply --check fix.patch

次に、必要な方法でそれを適用します。

# into the working folder, nothing staged
git apply fix.patch

# into the working folder and the staging area
git apply --index fix.patch

# as commits, with their messages and authors
git am patches/*.patch

git apply と git am の違いは何ですか?

git apply と git am の比較
git applygit am
読み取りあらゆる差分git format-patch からのファイル、またはメールボックス
結果ファイルが変更されましたが、コミットはありませんパッチごとに 1 つのコミット
メッセージと作成者を保持しますいいえはい
失敗したときデフォルトでは何も適用されません停止します。続行するか、git am --abort

「パッチが適用されません」を修正するにはどうすればよいですか?

error: patch failed: src/search.ts:14
error: src/search.ts: patch does not apply

パッチの作成後にファイルが変更されたため、そのコンテキスト行は一致しなくなりました。これらを順番に試してください。

  1. git apply --3way fix.patch は元の BLOB を使用してマージし、通常の競合マーカーを残します。リポジトリにこれらの BLOB が必要です。
  2. git apply --whitespace=fix fix.patch は、スペースまたは行末のみが異なる場合に役立ちます。
  3. git apply --reject fix.patch はできる限りのことを適用し、失敗した部分を手動で実行できるように .rej ファイルに書き込みます。
  4. パッチが作成されたコミットをチェックアウトし、そこに適用してからリベースします。

git am の場合は、git am --3way を使用して競合を解決し、ファイルを git add して git am --continue を実行します。取り消すには、マージまたはリベースを中止する方法 にリストされているように、git am --abort を実行します。

パッチを元に戻すにはどうすればよいですか?

git apply -R fix.patch

-R はパッチを逆に適用します。 git am を使用した場合、コミットは通常のコミットであるため、`git reset` または `git revert` を使用して元に戻します。

GitTree でパッチを作成して適用する方法

  1. パッチを保存する

    コミットを右クリックして コピー を開き、次に コミットからパッチを作成… を開きます。 コミットからパッチを作成... で複数のコミットを選択するか、ファイルの変更からパッチを作成... で変更されたファイルを右クリックします。

  2. パッチを適用する

    コマンド パレットから パッチの適用… を実行し、ファイルを選択します。 GitTree は、保持するファイルとコミットの数、およびバイナリ変更が含まれるかどうかを示します。

  3. 適用方法を選択してください

    適用先 で、作業ツリーのみ (git apply)、作業ツリーと変更のステージング (git apply --index)、または 現在のブランチのコミットとして (git am) を選択し、適用 を押します。

GitTree のコミットのコピー サブメニューにあるコミットからパッチを作成します。
GitTree のコミットのコピー サブメニューにあるコミットからパッチを作成します。GitTree はデモ リポジトリとのインターフェイスです。

パッチの作成と適用 のガイドには、すべてのオプションがリストされています。

よくある質問

git diff と git format-patch の違いは何ですか?

git diff は変更のみを書き込みます。 git format-patch は、メッセージ、作成者、日付を含むコミットごとに 1 つのファイルを書き込むため、git am はコミットを再作成できます。

git apply はコミットを作成しますか?

いいえ、ファイルを変更するだけです。それらを確認してから、通常どおりコミットします。コミットを取得するには、git am を使用します。

GitHub からパッチを適用するにはどうすればよいですか?

GitHub の commit または pull リクエスト URL の末尾に .patch を追加し、ファイルをダウンロードして、そのファイルに対して git am を実行します。

パッチにバイナリ ファイルを含めることはできますか?

はい、git diff --binary で作成した場合は可能です。 git format-patch にはデフォルトでバイナリ変更が含まれています。

チェリーピックはパッチよりも優れていますか?

両方のコミットが 1 つのリポジトリまたはフェッチされたリモートにある場合、はい: `git cherry-pick` の方が短く、ソース コミットを追跡します。パッチは、リポジトリが相互にアクセスできない場合に使用します。

情報源

他の製品に関する申し立ては、2026年11月7日 の公式ページと照合して確認されました。価格と機能は変更されます。ベンダーのページが真実の情報源です。