Git 使用 vimdiff 解决文件中的部分合并冲突

Git partial merge conflict resolve in a file with vimdiff

在合并冲突解决过程中,有没有办法只解决文件的某些冲突而不将此文件标记为“已解决”或将文件签出为冲突而不丢失已编辑的块?

目前我正在使用 vimdiff 作为 mergetool。我有一些文件我做了“部分”冲突解决,但是当使用 :wqa 退出 vimdiff 时,文件自动标记为“已解决”。

PS: 我知道我可以使用 git checkout --conflict=merge myfile.txt 重置文件中的所有冲突块,但我不会保留冲突已经按照我的需要解决了。

尝试了一下,我发现 mergetool helper 没有设置为处理更改文件而不是添加文件;如果您写入更改的内容但从 vimdiff 中错误退出(使用 :cq),它会重置文件。

但是没有什么能阻止你自己做这件事。 Mergetool 只是一个方便的包装器

vimdiff -c '4winc w' -c 'winc J' `git checkout-index --stage=all myfile.txt`

它会进行一些额外的重命名和重新排序,以便更容易识别哪个是哪个,然后自行清理,然后 git add 生成结果(如果你不 :cq ) 或 git checkout -m 就可以了。所以自己做 vimdiff 并记住 b1 b2 b3 是 git 的第 1 2 3 阶段内容,即以我们的为基础,您可以根据需要修复主文件,而无需助手帮助 git add 结果,你会想 rm .merge_file_* 在某个时候清理临时工。

或者在事后执行此操作,如果您想保留 git mergetool 如此自信地添加为完整解决方案的部分合并的 myfile.txt,(编辑:它一直困扰着我我知道的方式多么笨拙,果然有一种直接的方法可以做到这一点哦,Git v1.4 左右)

git update-index --unresolve myfile.txt