切换分支,IDEA文件缓存导致文件冲突

问题描述

今天在修BUG时,忘记切回目标分支A,当前是在分支B,意识到后就回滚了下(因为就删除一个语句,直接回滚,正常修改多的话,是先git stash,再切到目标分支,然后git stash pop),然后切回目标分支A,再次删除目标语句,这时候IDEA提示File Cache Conflict,

切换分支,IDEA文件缓存导致文件冲突_第1张图片

让我选择从内存还是文件系统选择文件内容,当时想的是我修改过,内存中肯定是最新的,我要的就是最新的,选择了Keep Memory Changes。

当时觉得没什么问题,后面发现,弹出这个提示的时候,内存里面还是B分支的内容,再加上我删除语句的内容。

B分支和A分支的区别就是B分支修改了一个方法名,然后删除了一个方法。

当我点击完Keep Memory Changes按钮时,此时本地修改就是我删除了一个我想删除的语句,然后修改了一个方法名,删除了一个方法,这些变更在我push的时候推送到了远程,相当于我在这个文件上把分支B的内容合并到分支A。

原因

IDEA弹出文件缓存冲突的弹框原因是:外部进程更改了文件,并在IntelliJ IDEA中打开和未保存文件,这导致文件的两个版本冲突。IDEA文档中是这样描述的https://jetbrains.com.zh.xy2401.com/help/idea/file-cache-conflict.html

在切换分支后,应该是IDEA太卡,分支内容还没来的及切换,我就删除了那个语句,IDEA认为此时文件的文件内容(B分支文件内容再加上我删除语句)就是我修改后的内容,这时候切换分支显示分之后的文件反应过来,发现文件有冲突,提示冲突,我选择Keep Memory Changes,于是就出现B分支内容被合并到A分支上。

总结与启示

发现这个错误时后背发凉,辛亏发现得早,不然就是一个生产事故,如果当时选择Load File System Changes那么我删除的那个语句就会被覆盖掉。正确做法就是查看不同的地方,选择性保留,就像和分支一样,保留最终版本。所以遇到代码的问题一定要弄清原因,删代码一定要慎重、慎重、慎重。
特此记录,时刻谨记!

你可能感兴趣的:(错误类,intellij-idea,Git分支切换,IDEA文件缓存冲突)