应用补丁后如何撤消? .rej/.orig 文件

应用补丁后如何撤消? .rej/.orig 文件

案件如下。我有两个文件:file1.c,file2.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

现在我留下了损坏的文件,并且不知道如何将它们恢复。似乎 *.orig 文件在第二遍时被替换为已经损坏的更改。有任何想法吗?

答案1

从原始文件中制作备份副本始终是一个好主意。

patch如果您使用 option调用,这可以自动完成-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

相关内容