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

问题描述 投票:2回答:1

我经常遇到这样的情况:git merge包含很多冲突,可以通过更改其中一个分支以更紧密地匹配另一个分支来轻松自动解决。可悲的是,我经常在手动解决数十个冲突之后才注意到这些模式,这真的需要人工审查;中止提交以应用脚本将意味着重做那些。

是否有可能从合并回到分支机构,而不会丢弃投入手动解决冲突的工作?


缺乏这种可能性,是否可以在冲突的文件上运行脚本,然后“自动解决”冲突,两个版本现在都相同?例如,假设某些文件包含很多形式的冲突

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

通过在受影响的文件中运行sed单行,很容易解决这些冲突,但我不知道一个工具,那将删除`<<<<<< ======= >> >>>>>“标记。


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

  • 收到实验修改后的快照作为ZIP文件,然后需要将我的更改合并到存储库中。
  • 相反的情况,我想将仅作为快照提供的第三方更改合并到我的来源中,没有共同的祖先状态被知道:经验丰富的业余爱好者游戏模型,导致数百行不同只有{sir/madam}成为{reg33?sir:madam}
  • 通过从程序导出在两个分支上独立创建的文件。不同的工作流程导致几乎相同的状态,除了\todo[inline]\todoinline之类的微小差异,在解决合并冲突时淹没了实际相关的差异。
  • 有些文件可能在一个分支上打印得很漂亮,如果在合并之前在其他分支上也应用了漂亮的打印,则会产生很多冲突。
git git-merge merge-conflict-resolution
1个回答
2
投票

是的:使用rerere,重用录制的分辨率。

如果你执行git config rerere.enabled true,你打开它的~auto~模式,当合并因冲突而停止时自动运行,并在你提交结果时再次运行。

即使在你不打算犯罪的情况下,这也很方便,因为你可以到达你所说的地方,你已经做了很多决议,并意识到你几乎可以避免所有其他的很少预处理,然后在中止合并之前手动执行git rerere

当rerere运行时(a)记住新的冲突和新的决议,(b)将记忆的决议应用于之前看到的冲突。所以在你的情况下,打开自动模式(我认为那些在注意它的人中几乎是普遍的)它已经注意到所有冲突并重新应用你之前显示的任何分辨率,所以当你到达你已经尽力而且即将退回并再次尝试使用手动运行git rerere的预处理数据的点,它会看到你提出的任何新决议并忽略剩余的冲突,因为它之前已经看到过它们了什么都没有给他们。然后中止合并,执行预处理,重新运行合并,自动重新同时将解决它可以识别的任何冲突并注意任何新的冲突。

但是,准备好了,Git无法识别两个文本上不同的帅哥在语义上是相同的,所以如果你的prettyprinter分裂行等等,那么即使你解决了旧文本中的语义冲突,Git也无法构造类似的文本变化。新文本。

© www.soinside.com 2019 - 2024. All rights reserved.