如何在 vimdiff 中合并来自一个修订版的两行和来自另一修订版的第三行?

How can I merge two lines from one revision and a third from the other in vimdiff?

我正在将两个 git 分支合并在一起。我正在使用 vimdiff 来执行此操作,因此我的终端中显示了三个 vim 窗格。

同样的冲突在我的合并中出现了数百次:

每次遇到它,我都想做同样的事情:保留顶部的两行来自 HEAD(粉红色)和底部的两行来自 OTHER(蓝色)。

目前我正在输入: 差异 3 接受 blue 的更改,然后进入插入模式并手动将 etc 更改为 var。

我觉得必须有一种更快的方法来让顶部两行每次都保持粉红色,第三行保持蓝色。在那儿?这会节省我很多打字时间。

谢谢。

如果冲突总是一样的,也许,你可以使用git rerere (What is git-rerere and how does it work?).

如果不是不同冲突的冲突(比如文件中多次出现冲突),可以做一个宏:

qq

搜索冲突:

/<<<<<<<

删除行:

dd

找到冲突的中间点:

/=======

排队视觉模式:

V

找到您要保留的最后一条蓝线之前的那条线:

/plan-path

全部删除:

d

找到冲突的结尾:

/>>>>>>>

删除它

dd

最后,停止宏:

q

制作宏后,计算冲突的发生次数:

:%s/<<<<<<<//n

执行宏次数:

42@q

如果您有其他类型的冲突,您可以根据需要调整宏。