如何生成差异文件或补丁文件,仅显示另一个补丁文件中包含的文件的差异?

How do I generate a diff or patch file only showing the differences of the files included in another patch file?

我一直在努力寻找一种简单的方法来做到这一点,但在网上找不到任何东西,所以我想我会分享我想出的解决方案。

这在您需要拆分特定差异文件时很有用。

因此,在处理需要将问题分解为多张工单的更大公司项目时,我发现自己需要为每张工单创建单独的 diff/patch 文件,即使我在同一个分支上工作相当多的文件更改。每个补丁文件只需要包含特定文件的差异,您可以这样做:

git diff master FILENAME_X FILENAME_Y FILENAME_Z (etc.)

但是每次我需要生成补丁时手动为每个文件做是非常耗时的,而且它包括我每次都忘记文件的可能性。

以下命令将创建一个包含不同补丁文件中所有文件的 diff/patch 文件:

`cat NAME_OF_INPUT_DIFF.diff | grep "+++" | awk -F "+++ b/" '{if (NR == 1)printf "git diff master " ; else printf " " }'` > NAME_OF_OUTPUT_DIFF.diff

cat NAME_OF_INPUT_DIFF.diff | grep "+++" 将之前的 diff 分解为仅包含 added/modified 文件名的行,然后 awk -F "+++ b/" 将其分解为仅解析的文件名,剥离前面的字符。其余的创建了冗长的 git 命令来生成特定文件的差异,并将其全部包装在反引号中使其在执行时被评估。然后 > NAME_OF_OUTPUT_DIFF.diff 将结果差异输出到文件。

无论如何,我希望这对像我一样的人有所帮助!非常省时。