在Git中恢复已经删除的Stash

今天工作的时候,需要从remote repository中获取别人提交的代码,但是自己的working tree已经修改的很多的东西,所以自然而然,先做一次stash再说。

不过在做stash的时候,正好在外部的编辑器中打开了一个工程中得资源文件,导致无法Git无法成功从working copy中删除这个文件。最终的结果是,stash做成功了,但是working copy依然是脏的。这个时候我做了莫名其妙的动作,直接删除了stash。删除完了才发现,stash没有了,但是working copy中只剩下那个孤零零的没有成功stash的文件。

一头冷汗哈,最近两天的工作啊。赶紧想办法把他找回来。还好还好,还是有办法的找回来的。

首先使用fsck命令找到dangling的对象。

git fsck
执行这个命令后,可以看到一大堆信息,就像下边的:

Checking object directories: 100% (256/256), done.
Checking objects: 100% (5572/5572), done.
dangling blob 6537cf0662e078710033e56b93a9b8aa6df60982
dangling commit 03d787944abf794d987a8793e6fce6bc92eaa54d
dangling commit f1e8f5c16aece59b9fe442f9f872aed9b5f2559c
dangling blob 69ec813d3669eb6a5441af1b0be17715e3230a91
dangling blob 16752b498905a04d1d702159c3c331381e1d98e9
这时候,找到你要恢复的对象,你可以用git show 来查看哪个是你删掉的。一旦找到了就好办了,有两个办法可以恢复:

一个是在.git/logs/refs/stash文件中加一条记录如下:

ID of previous stash commit in list or 0000000000000000000000000000000000000000 if none> Your Name
完成以后,你就可以在stash列表中看到你的被删除的stash对象。

另外一个方法就是执行git stash apply命令直接恢复到working copy中,这个时候,最好保证你的working copy是干净的。命令如下:

git stash apply ID(the ID of stash commit)
执行完毕,一切又都回来了!

from: http://ju.outofmemory.cn/entry/159623

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • git常用命令 GIT常用命令备忘:http://stormzhang.com/git/2014/01/27/gi...
    新篇章阅读 8,575评论 1 26
  • 本片内容转自CSDN http://blog.csdn.net/ithomer/article/details/7...
    五娃儿阅读 4,956评论 2 88
  • Add & Commit git init 初始化一个 Git 仓库(repository),即把当前所在目录变成...
    冬絮阅读 4,884评论 0 9
  • Git 基础 基本原理 客户端并不是只提取最新版本的文件快照,而是把代码仓库完整的镜像下来。这样一来,任何一处协同...
    __silhouette阅读 15,942评论 5 147
  • 你是否也有一个一直忘不掉的人? 那些爱而不得的时光里,你是怎么度过的? 今天,小猫想给大家推荐一部电影——《东邪西...
    橘小猫日记阅读 768评论 0 0