Git与KDiff3合并:在自动解决的冲突中导航以供查看?

58wvjzkj  于 2023-04-10  发布在  Git
关注(0)|答案(1)|浏览(154)

我使用Kdiff 3作为我的Git mergetool
运行git mergetool后,KDiff打开,弹出一个框告诉我:

  • 冲突总数:n
  • 自动解决的冲突数:a
  • 未解决的冲突:n - a

GUI顶部有3对按钮:下一个/上一个增量、下一个/上一个冲突、下一个/上一个未解决的冲突。
我可以浏览自动解决以供查看的冲突吗?当使用“下一个/上一个冲突”时,我只能浏览n - a个未解决的冲突。
似乎那些自动解决的冲突不再被标记为冲突,而是被降级为三角洲,并与其他三角洲一起丢失。这对我来说毫无意义。
我的评估正确吗?如何允许自动解决冲突以及事后导航?

92dk7w1h

92dk7w1h1#

你对“自动解决的冲突”和“增量”的区分是没有意义的/不存在的。
这里只存在“自动解决的冲突”和“未自动解决的冲突”。注意,由于不同的算法,普通git和KDiff 3之间的更改集合是不同的。与普通git相比,KDiff 3在接受接近的更改而不放弃方面更具“侵略性”,尽管在过去的几年中差异已经缩小,以前差别更大。
尽管如此,git将某些内容标记为无法自动解决的冲突并不罕见,只有KDiff 3在作为difftool启动时(或通过我的git-resolve-conflict-using-kdiff3脚本)声明没有未解决的冲突。
因此,自动解析的不是一门精确的科学,而是启发式算法,它可以执行change over time。即使自动解析,这也只是git/KDiff 3的猜测,绝对没有办法保证结果是正确的。
请考虑以下合并冲突示例:

在手动正确地将函数签名解析为static void hello(unsigned int count, const char *message)(这是唯一没有自动解决的冲突)之后,结果仍然不正确,因为函数goodbye包含对hello的调用,该调用只有一个参数,并且没有更新为包含新的count参数。
所以你不能依赖于自动解决的冲突是正确的,不管你多么希望它是真的。是的,这意味着你应该审查所有的更改,即使它“永远需要你”。
现在,您可以做一些事情来证明在KDiff 3中进行更轻松/更快速的审查是合理的。

  • 退出KDiff 3后使用git diff --cached(或可能的git diff -U10 --cached)查看。
  • 对分支上的所有提交运行git test来验证完整性/正确性,特别是在变基之后。

相关问题