git - 将多个 git diff 输出文件 merge 为一个统一文件

标签 git git-diff

我需要将多个不连续的 git diff 输出文件组合成一个大的统一 diff 文件。

git diff rev1 rev5 > diff1.txt

git diff rev44 rev551 > diff2.txt

这会产生 diff1.txtdiff2.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/

相关文章:

git - 对 .gitignore 的更改未显示在日志中,但显示在提交到提交差异中

git - 打印差异百分比

git - 执行 git apply 时出现错误 "git diff header lacks filename information when removing 1 leading pathname component "

git svn 工作流程 - 功能分支和 merge

git - 将修改过的文件从一个分支提交到另一个分支

ios - iOS项目的.git文件夹

Git 差异 : is it possible to show ONLY changed lines

php - 为 'apache' 用户生成 SSH key

git - 仍然无法在 3 月 1 日截止日期前解析 Git SSH 凭据

git - 在 git diff 输出中更改前后的行数