我需要将多个不连续的 git diff 输出文件组合成一个大的统一 diff 文件。
git diff rev1 rev5 > diff1.txt
git diff rev44 rev551 > diff2.txt
这会产生 diff1.txt
和diff2.txt
每个都有在线修改、删除和更新,采用标准的 git diff 格式,统一的方式。
我最终想要:
combine diff1.txt and diff2.txt
merge 到一个统一的 diff 文件中,该文件组合了 2 个 diff 文件,就像“git squash”或“merge ”一样,但仅包含这 2 个 diff 文件的输出。
我无法做任何类似的事情或解决这个问题,因为我通过svn diff --git
从SVN生成了这2个差异文件。 diff 工具,以兼容的 git diff 格式生成当前版本和先前版本之间的差异。所以我需要squash
这 2 个 diff 文件合二为一。
最佳答案
这里的问题是请求没有意义。
最终,差异是一组指令:应用这些更改 - 其中更改来自一组修改操作,通常是“删除行” 、“插入行”和/或“更改行”—到这些指定的行。按照说明进行操作会将一个文件(差异的左侧)转换为第二个文件(右侧)。在 git diff 统一 diff 输出的情况下,指令集包括左侧和右侧文件的一些上下文,并且指令仅限于“删除行”和“插入行”(或删除单词)并插入文字)。
这里的关键属性之一是此操作仅涉及两个文件。如果 diff 提供了一些上下文(就像 Git 所做的那样),则上下文有助于确保接收 diff 的人实际上与创建 diff 的人拥有相同的输入文件。因此,应用差异应该会产生相同的输出文件。
但就您而言,您有四个 文件。您的第一个 diff 表示将这些更改应用于文件 rev1
以生成文件 rev5
。您的第二个差异表示将这些更改应用于文件rev44
以生成文件rev555
。无法保证 rev44
在任何方面都类似于 rev5
。它可能在某种程度上类似于rev5
,但也可能不是。如果输入文件没有许多额外的约束,就不可能像这样组合指令。单个差异,无论它是如何构造的,都只会将一个输入文件更改为一个输出文件。您有两个输入和两个输出,因此您需要两个差异。如果您希望将它们组合起来,您必须构建(单个)输入和输出文件。您是唯一拥有所有四个文件的人,因此您是唯一有能力执行此操作的人。
关于git - 将多个 git diff 输出文件 merge 为一个统一文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57766611/