在解决合并冲突时,一个相当常见的模式是我和另一个人都修改了一个列表或其他一些通常被附加到的代码部分。如:
global.registerFeature(fc);
global.registerFeature(fb);
global.registerFeature(fa);
<<<<<<<
global.registerFeature(aNewFeature);
=======
global.registerFeature(anotherNewFeature);
>>>>>>>
当我在 vimdiff 中查看这样的合并冲突时,vim 为我提供了选择其中之一的选项。但我想要做的是应用两个差异。我通常只是直接编辑合并文件(只是删除合并标记);但是在 vimdiff 中有更简单的方法吗?
最佳答案
要在单个命令中组合来自目标分支和合并分支的更改:
您可以删除带有 Git 冲突标记的行。以下两种方法将删除所有以以下开头的行:
<<<<<<<
=======
>>>>>>>
方法一: 手动输入和执行命令
:g/^<\{7}\|^|\{7}\|^=\{7}\|^>\{7}/d
方法二: 实现用户自定义命令
"Delete all Git conflict markers
"Creates the command :GremoveConflictMarkers
function! RemoveConflictMarkers() range
echom a:firstline.'-'.a:lastline
execute a:firstline.','.a:lastline . ' g/^<\{7}\|^|\{7}\|^=\{7}\|^>\{7}/d'
endfunction
"-range=% default is whole file
command! -range=% GremoveConflictMarkers <line1>,<line2>call RemoveConflictMarkers()
Vim diffget 和 diffput 只会选择一个分支或另一个。因此,除了上面给出的解决方案之外,唯一真正的解决方案是手动从两个文件中拉取并粘贴到工作副本中。关于vim - 我如何接受 vimdiff hunk 中的两个更改?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36701875/