概述
问题
日常使用git 时,将本地所做的修改使用git stash暂存,使用git pull拉取代码之后,之间用git stash clear将git stash暂存的内容删除掉了。本文讲述如何恢复git stash clear掉的暂存区代码。
解决方法
执行指令
-
git log --graph --oneline --decorate $( git fsck --no-reflog | awk ‘/dangling commit/ {print $3}’ )
-
git stash apply 编号
案例
按照上述的顺序操作,输入指令后回车。
- 输入指令
git log --graph --oneline --decorate $( git fsck --no-reflog | awk ‘/dangling commit/ {print $3}’ )
上述指令直接拷贝,然后回车,不需要做任何改动。
执行完之后,会出现如下的列表:
在上述出现的列表中找到可能存在自己所做修改的那行描述,拷贝前面的黄色编号。
如:我在暂存”添加需要展示的中心线列表的信号槽绑定及函数“时可能当时自己所做的修改存在,我已经忘记了,为了安全起见,我选择这行描述的下一行,”优化斑块“,故而我的指令是:
git stash apply b20ea19
- 输入指令
git stash apply b20ea19
但是回车后报错,可以看到下面的图片:
使用git stash list查看暂存区的内容。发现git stash list之后什么也没有。
于是,再使用指令git stash 暂存。这里之所以再暂存,是因为执行完git stash apply b20ea19报错原因是由于报错中提到的两个冲突文件(之前冲突的文件,现在已经不冲突)。
暂存之后,接着执行
git stash apply b20ea19
可以看到,执行完之后,没有报错。且找到了之前删掉的在暂存区的文件。
附加收获
- 清空暂存区
git stash clear
- 暂存修改的文件
git stash
3.拉取最近的暂存
git stash pop
4.恢复被清除的暂存区文件
git log --graph --oneline --decorate $( git fsck --no-reflog | awk ‘/dangling commit/ {print $3}’ )
git stash apply 编号
这里的编号,是第一行指令回车后,根据自己的文本描述,定位自己之前没有被删除的文件所在的编号。