使用IDEA工具处理git合并后的冲突的细节

使用 IDEA 处理合并(merge)

使用IDEA处理git合并如果遇到冲突,对冲突文件的不冲突部分需要处理吗?会自动将双方不冲突的部分合并吗?

比如如下,使用 IDEA 合并 branch1 到 branch2 分支,出现了冲突,如下图:

如果处理好冲突,得到如下图:

我的问题是,绿色的部分如果不更新到中间的Result里头,在点击 Apply 之后会不会丢失掉?答案是会丢失,没有冲突的部分也得你操作点一下!中间的Result就是合并后的样子!

我为什么会有这个疑问,因为我以前是习惯直接使用命令行 git merge 来合并的,合并之后搜索 <<< 来确定有冲突的位置(当然也可以查看执行 git merge 命令后会列出冲突的文件列表),以前用git merge命令都是会自动合并没有冲突的部分,所以我改成用 IDEA 的图形化工具之后有这样的疑问

下面是上述结论的实践证明

假设我们现在不将绿色无冲突的部分手工弄到中间的Result,继续点击Apply,则 IDEA 还是比较人性化给你弹出提示,告知你还有未处理完的合并

此时如果点击 Continue Merge 就相当于继续处理剩余的,如果点击 Apply Changes and Mark Resolved 就是继续(老子就要这么干)

点击 Apply Changes and Mark Resolved 后就可以看到最终的合并结果丢失了两边绿色的内容,如下图:

细节

细节1:diff算法局限性

注意到diff算法的一些局限性。本该是显示新增的,结果显示为修改。

受限于差异算法,红框里的部分其实应该识别为新增内容,但是算法无法这么智能地识别这是新方法,它以为只是第一个方法即 getProfiles() 的延伸!!你可以看到红框里最后一个 } 被认为和原getProfiles() 方法的 } 相同,如下图:

细节2:从哪里可以看到什么分支合并到什么分支

在处理冲突的页面可以看到

另外还可以从下图看出(如果有冲突,最左边的就是 "合并到" 的分支)

有时候也非常奇葩,不显示分支名,显示的revision,不知道为什么。比如如下图是合并branch2到branch1,结果branch2被现实成revision,可读性变差了!!

细节3:"a合并到b" 和 "b合并到a" 就是显示的结果反过来而已
细节4:保留左边还是右边?

合并的时候自然可以选择保留两边任意一边的,也可以两边都保留,也可以两边都不采纳。中间的Result栏你要怎么改就怎么改,反正你在Result看到的就是最终的合并后的结果

如下图,可以不采纳左右两边的,最终结果使用一个新的变量名

细节5:处理完冲突之后,有没有一键左右两边的都合并到中间?

处理完某个文件中的冲突部分后,有时候左右两边的 >> 和 << 太多了,一个个点完了左边的>>还要一个点右边的<< 太费劲了,有没有快速的一次性将左边的>>全部采纳,和一次性右边的<<全部采纳,又或者一次性将左右两边的全采纳?

其实是有的

  • 点击 ">> Left" 这个则把左边无冲突的、所有的change应用过去(这样就不需要逐个点击,同时有冲突的不会一起过去)
  • 点击 ">> Right" 这个同理把右边无冲突的、所有的change应用过去
  • 点击 ">><< All" 则相当于点击了上面的两个按钮,同样的,会把无冲突的、全部的左右的change应用

注意

1、建议还是一个个点击会比较放心,除非你真的很自信你的操作没有问题。

2、上面的操作可以通过ctrl+z或cmd+z撤销

细节6:IDEA 右下角的分支终于会自动刷新了

实测Mac版本的 IDEA Ultimate Edtion 2023.1.3,在Terminal中切换分支,右下角显示的分支终于会实时刷新了(之前在Terminal中使用git checkout myBranch 之后并不会实时变化,要等鼠标点击到别的地方的时候才会刷新)

相关推荐
墨雨晨曦8811 分钟前
2026/08/15 spring AI学习总结
java·tomcat
wno70426 分钟前
Spring Boot JdbcTemplate配置Druid多数据源
java·spring boot·后端
聊浮游1 小时前
JAVA2026最新全套学习资料、学习路线
java·开发语言·jvm·mysql·spring·maven·idea
MacroZheng1 小时前
完美替代 Navicat!这款内置 AI 的数据库工具,太香了!
java·后端·mysql
丑过三八线2 小时前
Git 合并未合并分支完整教程
git
SamDeepThinking2 小时前
从REST到gRPC,一个API选型的思考框架
java·后端·程序员
Zane19942 小时前
接口都能写默认实现了,为什么还需要抽象类
java·后端
未秃头的程序猿2 小时前
读Spring AI源码的方法——不是硬啃,是带着问题去翻
java·后端·spring
用户3126874877202 小时前
别再 Thread.sleep 硬等了!并发工具类到底怎么选?
java
Java内核笔记2 小时前
万字长文剖析 Spring Boot 4 自动配置机制源码:从 @EnableAutoConfiguration 到条件装配
java·后端