パッチの逆適用で変更を元に戻す

逆適用(unapply)を使って以前に適用されたパッチを元に戻します。パッチ済みバージョンとDiffからオリジナルファイルを復元する方法を学びます。

Common Use Cases

詳細な説明

パッチの逆適用

逆適用はパッチ内の+-行の意味を入れ替え、変更を実質的に元に戻します。コマンドラインのpatch -Rと同等です。

逆適用を使う場面

  1. 変更の取り消し — パッチを適用したが元に戻したい
  2. オリジナルの復元 — パッチ済みファイルとDiffはあるがオリジナルがない
  3. リバートのテスト — パッチのリバートが期待通りのオリジナルを生成するか検証

パッチ済みファイル(手元にあるもの):

function greet(name, greeting = "Hello") {
  console.log(greeting + ", " + name + "!");
  return true;
}

適用されたパッチ:

--- a/greet.js
+++ b/greet.js
@@ -1,3 +1,3 @@
-function greet(name) {
-  console.log("Hello, " + name);
+function greet(name, greeting = "Hello") {
+  console.log(greeting + ", " + name + "!");
   return true;
 }

逆適用の結果(復元されたオリジナル):

function greet(name) {
  console.log("Hello, " + name);
  return true;
}

内部の仕組み

逆適用が有効な場合:

  • +で始まる行は削除する行として扱われる(現在のファイルに存在するはず)
  • -で始まる行は追加する行として扱われる(挿入される)
  • コンテキスト行( プレフィックス)は変更なし

ラウンドトリップの検証

有用な検証:パッチの適用後に同じパッチを逆適用するとオリジナルファイルが生成されるはずです。そうならない場合、パッチが編集されたか、オリジナルファイルがパッチの想定と異なっていた可能性があります。

ユースケース

本番環境にホットフィックスパッチを適用しましたがリグレッションが発生しました。バグ修正後の再適用のためにパッチを保持しつつ、迅速に変更をリバートする必要があります。

試してみる — Diff Patch Applier

フルツールを開く