git stash drop数据恢复详细过程以及使用shell脚本使用

        场景:手残不小心用git stash drop 删除了git stash 储藏里的数据,用git stash list查看储藏里一片空白。删除的比较多,重写很麻烦,只有想办法恢复git stash里的数据。

        去网上找办法,很简单,使用 git stash apply 记录id,就可以恢复了。但是!关键点时如何找到那个id!,在几百几千个id中找到你需要的那个id!

        记录一下我寻找id恢复数据的过程。

1. 列出所有丢弃的id

git fsck --lost-found 或者git fsck --unreachable    

列出来的就是每一个id,这里面就有你drop掉的那个id,你可以使用 git show id 命令看每个id里面的内容。找到内容里是你需要的那个id,就大功告成了。(ps:如果你列出的id只有几个的话,可以一个个的git show 查询内容。)

但是我列出的id,有几百个,一个个的git show 查询内容,显然不可能。

网上的办法就是,编写脚本 根据你丢弃的数据内容关键字,过滤查询到哪个id!但是我不会写脚本!只会一点简单的命令。下面就是我临时抱佛脚学习shell脚本找到那个id的过程。(如果你会shell脚本的话,那这一步对你来说很简答)

2. 找到那个id

使用  git fsck --lost-found   >> d:/shell/a.txt  命令,将所有丢弃的id 导入到a.txt文件里 

在文件a.txt 文件里,你会得到一行行这样的记录

在excel里将其处理成

一行行这样的记录

        git show	b01120a00868d23ba9baec240f9b068fe7747b65	>>d:/shell/file/b01120a00868d23ba9baec240f9b068fe7747b65

就是将git show 的内容输出到 以这个id命名的文件里,然后遍历检索文件里的内容。返回那个匹配特定内容的文件名。

dir="D:\gitlab\platform"
cd "$dir" ||exit 1
        git show	b01120a00868d23ba9baec240f9b068fe7747b65	>>d:/shell/file/b01120a00868d23ba9baec240f9b068fe7747b65
        git show	b346f098a4383f50d3955648cb8e73a6fa7b074f	>>d:/shell/file/b346f098a4383f50d3955648cb8e73a6fa7b074f
        git show	4a6d20baf54852746f90ee4882353d38fbc55636	>>d:/shell/file/4a6d20baf54852746f90ee4882353d38fbc55636

先切换到你的git项目目录,再执行。git  show 命令,将显示的内容,输入到以该分支名字的文件里。

3. 遍历文件找到那个id

注意搜索的目录,和指定的内容,我是要检索“DownLoad”

# 指定要搜索的目录
search_dir="d:/shell/file"
# 指定要搜索的特定文字
search_text="DownLoad"

# 遍历目录下所有的txt文件
for file in "$search_dir"/*; do
	if grep -q "$search_text" "$file"; then
	echo "Found the text '$search_text' in the file: $file"  >> d:/shell/result.txt
	echo "-----------"
	fi

done

搜索结果,只能几个id了,可以一一git show了, (因为我指定的内容比较宽泛)

最终找到了需要的那个id,用git stash apply id ,应用到当前分支上,

大功告成!

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值