git stash

git stash误删恢复
今天写代码遇到一个小问题,代码未写完不想commit,但是要切换分支去处理任务,于是git stash 备份当前的工作区的内容。
没有进行

git stash apply 
git stash apply xxx

返回来,不小心使用错误命令:git stash drop(git stash clear),于是暂存的修改全部没有了。
于是,通过命令git fsck –lost-found找到最近的一些删除的提交,其实自己删除的id号前面命令行是有的,
找到abf709*,然后git show abf709*查看修改情况,git merge abf709 或者git stash apply abf709即可修复删除掉的内容了。
git stash pop,不同于git stash apply, 会应用且pop出最近的一次stash,stash list不再会有之前的stash。git stash pop出的change是可以找回的.
1.每次git stash都会生成一个新的commit,只要知道commitID, 通过git stash apply commitID 就可以应用之前的stash,然后重新git stash, 那么新修改就
回到了stash list中。寻找commitID有两种方法:

2.git stash pop 最后会打印出pop掉的commitid值,若这个记录还存在直接使用即可。
git fsck, 会打印出所有的dangling commit, 悬挂的commit是不被任何branch引用的commit。 一般list出的第一个commit即是刚刚被pop掉的commit。也可通过查看commit在commit graph中的位置确定对应的commitID:
git log --graph --oneline 3}')

git使用了这么久,其实还是有很多东西没能深入了解,比如blob,tree,tag和commit都代表了什么含义,各有什么作用,查找了一些资料,学习记录一下。
每个object包含三个部分:类型,大小和内容。大小就是指内容的大小,内容取决于对象的类型,有四种类型的对象,也就是上面提到的blob,tree,tag和commit。

blob用来存储文件数据,通常是一个文件

tree有点像一个目录,它管理一些tree或blob,就像文件和子目录

tag标签,用来标记某一次的commit

commit只指向一个tree,它用来标记项目某一个特定时间点的状态。它包括一些关于时间点的元数据,比如时间戳、最近一次提交的作者,指向上次提交的指针等等。
参考链接https://stackoverflow.com/questions/89332/how-to-recover-a-dropped-stash-in-git

你可能感兴趣的:(git stash)