代码之家  ›  专栏  ›  技术社区  ›  kdb

在预处理分支后重新应用合并?

  •  1
  • kdb  · 技术社区  · 7 年前

    git merge 包含大量冲突,通过更改一个分支以更紧密地匹配另一个分支,可以轻松地自动解决这些冲突。可悲的是,我经常注意到,只有在手动解决了几十个冲突之后,这些模式才真正需要手动检查;中止提交以应用脚本将意味着重新执行这些操作。


    如果没有这种可能性,是否可以在冲突的文件上运行脚本,然后“自动解决”冲突,这两个版本现在是相同的?例如,假设某些文件包含许多表单冲突

    <<<<<<< HEAD
    aaaaaaaa \todo{bbbbbbbb} cccccccc
    =======
    aaaaaaaa \TODO{bbbbbbbb} cccccccc
    >>>>>>> other
    

    通过运行 sed 在受影响的文件中添加一行代码,但我不知道有什么工具可以删除`<<<<<<============&燃气轮机&燃气轮机&燃气轮机&燃气轮机&燃气轮机&燃气轮机>”标记。


    通常,导致此类问题的工作流是非标准情况,例如:

    • 收到一个经过实验修改的快照作为ZIP文件,之后需要将我的更改合并到存储库中。

    • {sir/madam} 相配的 {reg33?sir:madam} .

    • 通过从程序导出在两个分支上独立创建的文件。不同的工作流程导致了 相同的状态,但微小的差异除外,例如 \todo[inline] vs \todoinline

    • 一些文件可能在一个分支上进行了漂亮的打印,如果在合并之前在另一个分支上也进行了漂亮的打印,那么会产生很多冲突,这些冲突将消失。

    0 回复  |  直到 7 年前
        1
  •  2
  •   jthill    7 年前

    是:使用 rerere , 重新 使用 重新 绳索 重新

    如果你这样做 git config rerere.enabled true 您可以打开~auto~模式,在该模式下,当合并因冲突而停止时,以及当您提交结果时,它会自动运行。

    即使在你不打算提交的情况下,这也很方便,因为你可以到达你正在谈论的地方,在那里你已经做了很多解决方案,并且意识到你可以通过一点预处理来避免几乎所有的其他问题,然后再去做 git rerere 在中止合并之前手动执行。

    当Reere运行时,(a)记住新的冲突和新的解决方案,(b)将记住的解决方案应用到以前看到的冲突。因此,在您的情况下,当自动模式打开时(我认为这在注意到它的人中几乎是普遍的),它会注意到所有的冲突,并重新应用您之前显示的任何解决方案,因此当您达到您已经尽了所能并准备返回并再次尝试使用预处理数据时,您可以运行 吉特雷雷雷尔酒店 手动操作时,它会看到您提出的任何新解决方案,并忽略剩余的冲突,因为它以前见过这些冲突,但它对它们毫无用处。然后中止合并,进行预处理,重新运行合并和自动重新执行都将解决它可以识别的任何冲突,并注意到任何新的冲突。

    推荐文章