记一次因 IDEA 造成的 Git 切换分支自动恢复工作区的问题
今天突然发现,在 IDEA 上切换分支,竟然将上一个分支的内容同步到了新的分支,起初还以为切换分支失败了,结果 IDEA 提示分支切换成功,这就很奇怪了,理论上切换分支是不会将上一个分支没有 commit
的内容同步过来新分支的,因为这种操作会被 Git 阻止,就不应该切换成功,但是的确是切换成功了,修改也同步迁移到了新的分支,这使我十分混乱。
不过使用了这么久的 Git,也猜到了不是它的问题,这个问题不用想,可以肯定是出在 IDEA 上。
测试触发手段
- IDEA 内嵌的分支切换功能
- Git 切换分支(IDEA 运行时)
发现当上面两种方式,在还有修改没有提交时是可以切换分支的,并且可以将没有提交的修改同步到新的分支中。
这里已经可以完全肯定是 IDEA 的问题了,但是我没有想到,在 IDEA 运行期间,且项目目录和 Git 项目是同一个时,使用 Git 命令行的切换也是会触发。看来 IDEA 是监测了 Git 的行为,当需要切换分支时,保存当前修改到缓存,将工作区清理干净,所以 Git 可以切换成功,到时候 IDEA 再自动修改文件,基本就完成了整个过程。
脑补完整个过程,开始在 IDEA 里面寻找相关的设置,这个功能这么有趣,应该是可以设置开关状态的,果不其然,在版本管理的设置里面逛了好一会,发现了这个有趣的功能,因为以前没有在 idea 上进行“违规”的分支切换,所以一致不知道这个功能的存在。
这是一个叫做 Restore workspace on branch switching
的可勾选项,翻译过来大概意思就是“切换分支时自动恢复工作区”,这句话也不难理解,就是说将你在切换分支前,没有 commit
的修改内容同步到新的分支中,而在原生的 Git 里面,这种行为是不会被支持的。
当取消勾选,重启 IDEA 之后,再尝试未提交修改的前提下切换分支,果然被 IDEA 阻止,弹出提交窗口提示我提交代码。