美文网首页
在Git中恢复已经删除的Stash

在Git中恢复已经删除的Stash

作者: 我的昵称在不在 | 来源:发表于2018-03-13 19:58 被阅读0次

    今天工作的时候,需要从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中恢复已经删除的Stash

          本文链接:https://www.haomeiwen.com/subject/vartqftx.html