パッチを適用した後に元に戻す方法は? .rej/.orig ファイル

パッチを適用した後に元に戻す方法は? .rej/.orig ファイル

イベントは次のとおりです。 2つのファイルがあります:file1.cfile2.c

ls 
file1.c file2.c patch.diff
patch < patch.diff
...
x out of x hunk FAILED -- saving rejects to file file1.c.rej 
(the same with file2.c)
ls
file1.c file2.c file1.c.orig file2.c.orig file1.c.rej file2.c.rej patch.diff
patch -R < patch.diff # I thought it will revert changes back
...
x out of x hunk FAILED -- saving rejects to file file1.c.rej
(again, the same with file2.c)    
ls
file1.c file2.c file1.c.orig file2.c.orig file1.c.rej file2.c.rej patch.diff

これで、破損したファイルが残っていますが、どのように修復できるかわかりません。 2番目のステップでは、* .origファイルがすでに破損している変更に置き換えられているようです。どんなアイデアがありますか?

答え1

常にソースファイルからバックアップコピーを作成することをお勧めします。

patchcallオプションを使用すると、自動的にこれを実行できます-b

背景:ファイルがない場合は、.rej次を呼び出すことができます。

patch -R

パッチを反転します。ただし、問題が発生した場合は動作しません。

file2.c.orig起動時にファイルがすでに存在する場合、patchそのファイルは削除され、現在の状態のバックアップコピーに置き換えられます。

これらのファイルがある場合は、.orig簡単に元のファイル名に名前を変更してパッチを元に戻すことができます。

単一のパッチが失敗した場合は、プロジェクト内のすべてのファイルのすべてのパッチをキャンセルするのが最善です。パッチが適用されたすべてのファイルのファイルが必要なので、.orig以下を使用することをお勧めします。

patch -b

これらのファイルがある場合は、.orig次のように電話できます。

for i in *.orig; do
    base=`basename $i .orig`
    mv $i $base
done

関連情報