Ryan Shang

生死看淡,不服就干

0%

记录一次个人git事故

今天圣诞节,在工作时侯,出现了一个有意思的意外情况,这里做下记录。

事情经过

一个比较大的需求,每天都保持了一次个人开发分支提交。今天发现有4次提交没有合并到主开发分支,于是动手合并,合并记如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
10262  gco dev
10263 git pull
10264 git log
10265 gco feature/my-dev-branch
10266 git rebase dev
10267 git rebase -i HEAD~4
10268 git log
10269 git rebase -i HEAD~1
10270 git log
10271 git push -f
10272 gco dev
10273 git merge feature/my-dev-branch
10274 git push
10275 git log

我们部门合并到主开发分支前,要求合并下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命令成功回到最新一次提交,找回所有代码。

事后反思

  1. 对git操作一定要谨慎
  2. 每做一步操作,及时检查,不能认为自己经常操作的步骤就一定没有问题
  3. 多了解git的命令,有助于出错后及时拨乱反正