背景
有一天,突然要上线一个项目。
依稀记得这个项目是在疫情之前开发的,他安静的躺在我项目的某个分支下面。
开发完成之后公司迁移过几次git远程仓库。
这些代码几乎快要淡出我的记忆。
我看了一下远程似乎没有找到我要的分支。
然后,看了一下我本地的分支,并没有找到。
然后我有些慌了。。。
过程
首先我要查找我之前删除过的分支,执行以下命令
git reflog
image-20200610133725777.png
这里有一些之前切换分支信息。
我要根据我之前提交代码时间大致筛选出一些head。
也许在那里能找得到一些线索
# 将上面的列表中检出一个新的分支 第一个1279是新分支的名称 后一个是需要检出来源分支
git branch 1279 HEAD@{1279}
# 切换到检出的分支
git checkout 1279
# 查看当前分支的提交记录
git log
image-20200610141058203.png
然而,这个分支最后一次提交是2020年2月,查看这个分支的合并记录后,再使用工具查看这个分支的合并记录
image-20200610142120015.png
上面根本没有我之前写代码提交的影子。
这个时候,依稀记得刚刚上班的时候,因为自己误操作(这里还有剧情,具体省略),删除了本地项目文件夹。
当前所有的分支,都是在线上master分支检出的。
因为,我当时的代码没有上线,所以master上也不会有代码的提交记录。
此时,我陷入了绝望。。。
就在,我准备开始估算重新写需要花费多少时间时。
突然,我脑海里闪过一个念头
我们之前有个本地机器,之前我们作为测试环境使用。
那台机器上拥有我们之前测试用的代码,以及所有的提交到测试分支的git记录。
同样的方法,我定位到了我需要的heade,
# 查看当前分支的提交记录
git log
image-20200610145052916.png
# 找到需要定位的点,从哪个点检出分支
git branch myLostBranch ccf4b6d037ccafd6bdf7a8508b04c038a6ad2c9c
至此,只需要将分支myLostBranch 推到远程仓库,然后下载到我本地。
大功告成!
后续,我需要手动将代码合并到我需要的分支上。因为,这些代码已经滞后很久了~
反思
- 本地代码及时提交远程仓库
- 除非万不得已,不要删除本地项目文件夹,(这里主要不要删除git操作记录)
- 最好使用git rebase 代替git merge