今天圣诞节,在工作时侯,出现了一个有意思的意外情况,这里做下记录。
事情经过
一个比较大的需求,每天都保持了一次个人开发分支提交。今天发现有4次提交没有合并到主开发分支,于是动手合并,合并记如下:
1 | 10262 gco dev |
我们部门合并到主开发分支前,要求合并下commit记录,按照以往的流程是没有问题的。
但是在执行git rebase -i HEAD~4
合并commit记录时候,可能最近用vim写文件删除操作较多,顺手把三个记录直接使用vim快捷操作dd
删除并快速保存,并不是修改提交记录前的标签。当时并没有注意,执行git push -f
后,发现VSCode中打开的文件显示已删除,于是才发现问题。
事情后果
如果不处理,相当于三天工作量打水漂,代码需要重写,严重影响排期。
解决过程
第一反应是执行git log
查看已经提交的记录是否存在,存在的话使用git reset
配合记录的哈希值可以恢复到那次提交记录。结果当然相关的 commit 记录已经被删除。
如果可以找到丢失的commit记录,应该就可以快速找回丢失的代码。
于是去git官网和搜索引擎下找了commit记录丢失后的相关命令,发现这个命令:
1 | git reflog |
返回结果里面包含本队分支的操作记录,包括提交、切换分支等,在其中找到对应提交的哈希值,使用git reset
命令成功回到最新一次提交,找回所有代码。
事后反思
- 对git操作一定要谨慎
- 每做一步操作,及时检查,不能认为自己经常操作的步骤就一定没有问题
- 多了解git的命令,有助于出错后及时拨乱反正