使用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 之后并不会实时变化,要等鼠标点击到别的地方的时候才会刷新)

相关推荐
头发还在的女程序员13 小时前
医院陪诊管理系统怎么选择?——2026 年选型避坑与架构参考
java·开发语言·陪诊系统·陪诊app·医院陪诊陪护
CodeStats13 小时前
【Spring事务】Spring事务注解 @Transactional 完整体系:从 MySQL 隔离级别到 MyBatis 原理详解
java·spring·mybatis·事务·transactional
我命由我1234514 小时前
Android 开发问题:为 PDFView 设置一个带有黑色边框的背景 drawable,但边框没有生效
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
都叫我大帅哥16 小时前
从Python到Java:为什么企业级Agent最终会选择Java?
java·ai编程
wanderist.16 小时前
Lambda表达式在算法竞赛中的应用
java·开发语言·算法
腻害兔18 小时前
【若依项目-产品经理视角】RuoYi-Vue-Pro 源码拆解:IM 即时通讯模块,一个被低估的「全功能聊天系统」
java·前端·vue.js·产品经理·ai编程
炸膛坦客18 小时前
Git 和 GitHub:(七)将本地新建仓库与 GitHub 远程仓库关联起来(SSH)
git·ssh·github
心念枕惊18 小时前
.NET CORE 授权进阶-角色、策略与动态权限实现
java·前端·.netcore
景同学20 小时前
把 AI 用到线上运维:可行、有效,前提是喂足信息——一次 Full GC 排障实录
java·人工智能·后端
C++、Java和Python的菜鸟20 小时前
第7章 后端Web实战(Tlias系统)
java