git stash误使用drop删掉本地保存,再恢复代码一次记录

简介: git stash误使用drop删掉本地保存,再恢复代码一次记录

前言:

在使用git时候我们会临时切换一些分支,而切换时候你本地会有一些更改了的代码,但是这些代码还没有写完整,所以我们一般会进行git stash 本地保存一下。然后等后面代码切换回来之后,再 git stash apply ,代码恢复之后我们会把这些临时本地保存代码stash记录清除掉,但是清除就可能出现误操作。我有次就遇到了误删,因为stash list里面有五六个版本,而且很多对应了一个commit。这个时候我们怎么找回误删的的代码呢?

给大家分享一下自己的实操。


恢复步骤记录:

其实整体步骤不是很多,但是中间去一个个测试那个版本是否是你需要的比较耗费时间。首先,我们当使用git stash drop和git stash pop时候,git stash list是看上去不可见了,但是实质上git并没有删除这个文件,就是你的引用关系被移除了,你需要去搜索那条对应被丢弃的commit下的代码。

显示出所有不可访问的对象

git fsck --lost-found

4edc953e2c684bbe819ffa954c899c08.png

一般来说有很多的搜索结果,多达上百条,这个时候我们可以去进行去排除一些用不到的数据。

我们来看看这些数据类型的含义:

blobs 每个blob代表一个(版本的)文件,blob只包含文件的数据,而忽略文件的其他元数据,如名字、路径、格式等。tags tag用于给某个上述类型的对象指配一个便于开发者记忆的名字, 通常用于某次commit。

trees 每个tree代表了一个目录的信息,包含了此目录下的blobs,子目录(对应于子trees),文件名、路径等元数据。因此,对于有子目录的目录,git相当于存储了嵌套的trees。

commits 每个commit记录了提交一个更新的所有元数据,如指向的tree,父commit,作者、提交者、提交日期、提交日志等。每次提交都指向一个tree对象,记录了当次提交时的目录信息。一个commit可以有多个(至少一个)父commits。

经过分析我们知道commit类型的后面跟着的id是我们可以用到的,但是搜索出来的列表不是按照时间来进行排序的,这样就给我们又造成了一些选择的负担,好在虽然搜索结果很多,但是commit类型的结果数量还是可以接受的,所以我用了一个笨办法,我把所有搜索到的结果都放到一个文件中,然后只保留下commit类型的数据。

查看每个id下的代码文件是否是需要恢复的

git stash apply  指定id

如下所示:

4edc953e2c684bbe819ffa954c899c08.png

但是不是一次就可以找到对应的id,所以当查看到代码文件是有问题的时候,我再复位清除一次代码文件

git reset --hard

直至找到对应的文件


结语

这就是我分享的某次git误删stash文件之后的恢复工作,如果大家有更好的想法和需求,也欢迎大家加我好友交流分享哈。


作者:良知犹存,白天努力工作,晚上原创公号号主。公众号内容除了技术还有些人生感悟,一个认真输出内容的职场老司机,也是一个技术之外丰富生活的人,摄影、音乐 and 篮球。关注我,与我一起同行。


目录
相关文章
|
2月前
|
IDE 网络安全 开发工具
【Azure App Service】Local Git App Service的仓库代码遇见卡住不Clone代码的问题
【Azure App Service】Local Git App Service的仓库代码遇见卡住不Clone代码的问题
【Azure App Service】Local Git App Service的仓库代码遇见卡住不Clone代码的问题
|
2月前
|
开发工具 数据安全/隐私保护 git
记录一次使用git工具拉取coding上代码密码账号错误的经历
这篇文章记录了作者在使用Git工具从Coding平台克隆项目时遇到的账号密码错误问题,并分享了通过清除电脑凭证中错误记录的账号密码来解决这个问题的方法。
记录一次使用git工具拉取coding上代码密码账号错误的经历
|
2月前
|
开发工具 git Python
通过Python脚本git pull 自动重试拉取代码
通过Python脚本git pull 自动重试拉取代码
148 5
|
16天前
|
开发工具 git
|
16天前
|
Shell 网络安全 开发工具
git与gitee结合使用,提交代码,文件到远程仓库
本文介绍了如何将Git与Gitee结合使用来提交代码文件到远程仓库。内容涵盖了Git的安装和环境变量配置、SSH公钥的生成和配置、在Gitee上创建仓库、设置Git的全局用户信息、初始化本地仓库、添加远程仓库地址、提交文件和推送到远程仓库的步骤。此外,还提供了如何克隆远程仓库到本地的命令。
git与gitee结合使用,提交代码,文件到远程仓库
|
2月前
|
测试技术 开发工具 文件存储
Git Stash
【8月更文挑战第27天】
48 6
|
2月前
|
存储 小程序 安全
【技巧】git stash用的好,切换分支随便搞
本文详细介绍了 Git 中的 `git stash` 命令,帮助你在切换分支时临时保存未提交的更改。通过实际操作示例,展示了如何使用 `git stash` 的各种命令,如 `save`、`list`、`apply` 等。无论你是初学者还是有一定经验的开发者,都能从中受益。
48 0
【技巧】git stash用的好,切换分支随便搞
|
2月前
|
Shell 开发工具 git
使用 Shell 代码简化 Git 步骤
【8月更文挑战第23天】本文介绍通过Shell脚本简化Git操作的方法:1) 使用`gitc "提交信息"`可一键完成代码提交与推送至远程仓库;2) 执行`gitpull`即可从远程仓库拉取最新代码并合并到当前分支;3) 输入`gitnewbranch 分支名称`快速创建并切换到新分支。将这些自定义函数加入`.bashrc`或`.zshrc`等配置文件后,即可随时调用简化版Git命令。
|
2月前
|
安全 开发工具 git
coding上创建项目、创建代码仓库、将IDEA中的代码提交到coding上的代码仓库、Git的下载、IDEA上配置git
这篇文章是关于如何在IDEA中配置Git、在Coding.net上创建项目和代码仓库,并将IDEA中的代码提交到远程代码仓库的详细教程,涵盖了Git安装、IDEA配置、项目创建、代码提交等步骤。
coding上创建项目、创建代码仓库、将IDEA中的代码提交到coding上的代码仓库、Git的下载、IDEA上配置git
|
2月前
|
前端开发 JavaScript PHP
【Azure 应用服务】App Service 在使用GIt本地部署,上传代码的路径为/home/site/repository,而不是站点的根目录/home/site/wwwroot。 这个是因为什么?
【Azure 应用服务】App Service 在使用GIt本地部署,上传代码的路径为/home/site/repository,而不是站点的根目录/home/site/wwwroot。 这个是因为什么?