如何仅修补diff中的特定块

Cyr*_*rus 17 diff patch

有没有办法将diff中的单个Hunk应用到文件中?例如,假设我从文件A和B执行差异,并产生三个差异块,每个差异用...表示

@@ -971,30 +977,28 @@
Run Code Online (Sandbox Code Playgroud)

......(在统一差异的情况下).然后,我希望能够将该差异提供给stdin,并且要求补丁仅应用大块N.

手动方法是剪切和粘贴有趣的帅哥,但我不是在那种解决方案之后.

小智 11

filterdiff可能有所帮助.

它允许从一个/多个补丁文件中提取符合各种要求的补丁子集.例如,这里我们从文件中提取unified_diff.patch适用于名称匹配的文件的补丁one_file.c,仅限于原始文件的950到1050行:

filterdiff -i *one_file.c --lines=950,1050 unified_diff.patch
Run Code Online (Sandbox Code Playgroud)

提取具体/范围的帅哥:

filterdiff --hunks=1,3,5-8,15 file.patch
Run Code Online (Sandbox Code Playgroud)

从邮件消息中提取补丁:

filterdiff message-with-diff-in-the-body > file.patch
Run Code Online (Sandbox Code Playgroud)

等等


Dav*_*gue 0

一些 GUI diff/patch 工具可以选择块甚至单独的行。我知道 TortoiseSVN 的 TortoiseDiff 可以这样工作。我想我见过温迪夫这样做过,但自从我不得不使用它以来已经有一段时间了。

就命令行工具而言,我还没有看到任何可以满足您要求的工具。