【IDEA】代码未提交(commit)拉取(pull) 远程代码导致代码全部丢失的bug

时间:2024-04-13 11:28:31

问题描述

今天早上拉取公司服务器代码后遇见了一个非常奇怪的问题:自己先前费了两天写的代码文件全部丢失了!!!而且马上到了任务截止时间,此刻我的心情…

【IDEA】代码未提交(commit)拉取(pull) 远程代码导致代码全部丢失的bug

分析问题

冷静了3秒后,凭借多年的经验我的第一反应看控制台 Event Log 有没有提示什么东东,果然我发现一丝丝线索:
【IDEA】代码未提交(commit)拉取(pull) 远程代码导致代码全部丢失的bug
通过上面的警告信息后,原来是由于我未 commit 的文件在更新之前自动保存在 stash,接下来顺便了解了 Git stash 的作用:将目前还不想提交的但是已经修改的内容进行保存至堆栈中,后续可以在某个分支上恢复出堆栈中的内容(相当于将代码进行隐藏),看到这里读者们是不是和我一样突然就悟出了一个真理!!! 那就是没有提交的内容都会保存至堆栈中
【IDEA】代码未提交(commit)拉取(pull) 远程代码导致代码全部丢失的bug

解决问题

此刻我们想将隐藏的代码进行恢复,那么我们将会使用到 Git unstash命令,还好【IDEA】编辑器已经为我们提供了这个选项。VCS–>git–>Unstash

【IDEA】代码未提交(commit)拉取(pull) 远程代码导致代码全部丢失的bug

选中你刚刚的stash 先查看其内容,可以看到我们之前丢失的代码文件列表如下所示:

【IDEA】代码未提交(commit)拉取(pull) 远程代码导致代码全部丢失的bug

接下来选中Pop stash,点击pop stash即可

【IDEA】代码未提交(commit)拉取(pull) 远程代码导致代码全部丢失的bug

本以为一切顺利,万事大吉。但万万没想到又出了一个问题。不过此刻的我稳如老狗:

【IDEA】代码未提交(commit)拉取(pull) 远程代码导致代码全部丢失的bug
根据右下角屏幕的错误信息提示:本地更改会被merge所覆盖

【IDEA】代码未提交(commit)拉取(pull) 远程代码导致代码全部丢失的bug

so 这里点击view them 然后就看到了下面两个文件信息:

【IDEA】代码未提交(commit)拉取(pull) 远程代码导致代码全部丢失的bug

.idea目录下所有文件,我已经在.gitignore中声明忽略了,所以我的localChanges中并没有该文件。排查一番后查看git提交的历史,发现是其他同事将这个目录下的文件加入了版本控制并提交到git仓库中 ???????????? 。

【IDEA】代码未提交(commit)拉取(pull) 远程代码导致代码全部丢失的bug
我还能说什么呢?不过虽然是别人挖的坑,那就辛苦咱自己解决了
【IDEA】代码未提交(commit)拉取(pull) 远程代码导致代码全部丢失的bug
由于我在idea已经设置忽略的文档,所以先将这个idea 文件目录先放出来,
Macos 系统中 Preferences–>Editor–>File Types 删除 *.idea 如下所示:
【IDEA】代码未提交(commit)拉取(pull) 远程代码导致代码全部丢失的bug
将下面这两个文件进行 revert 保持一致在进行 Git unstash 操作如下所示:
【IDEA】代码未提交(commit)拉取(pull) 远程代码导致代码全部丢失的bug

然后我们在按照上面 Git unstash 操作后,发现之前丢失的代码都回来了此刻已经感动的泪目。
【IDEA】代码未提交(commit)拉取(pull) 远程代码导致代码全部丢失的bug

到了这一步,还需要做的就是立刻、马上 commit 自己的代码然后提交到git 仓库上。


总结

此刻给自己敲响了一个警钟:以后在拉取服务器的代码前先保证自己的代码已经commit后,在从服务器上pull 代码。