今天工作的時(shí)候,需要從remote repository中獲取別人提交的代碼肠鲫,但是自己的working tree已經(jīng)修改的很多的東西鸟顺,所以自然而然,先做一次stash再說亥贸。
不過在做stash的時(shí)候躬窜,正好在外部的編輯器中打開了一個(gè)工程中得資源文件,導(dǎo)致無法Git無法成功從working copy中刪除這個(gè)文件炕置。最終的結(jié)果是荣挨,stash做成功了,但是working copy依然是臟的朴摊。這個(gè)時(shí)候我做了莫名其妙的動(dòng)作默垄,直接刪除了stash。刪除完了才發(fā)現(xiàn)甚纲,stash沒有了口锭,但是working copy中只剩下那個(gè)孤零零的沒有成功stash的文件。
一頭冷汗哈介杆,最近兩天的工作啊鹃操。趕緊想辦法把他找回來。還好還好春哨,還是有辦法的找回來的组民。
首先使用fsck命令找到dangling的對(duì)象。
git fsck
執(zhí)行這個(gè)命令后悲靴,可以看到一大堆信息臭胜,就像下邊的:
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
這時(shí)候,找到你要恢復(fù)的對(duì)象癞尚,你可以用git show 來查看哪個(gè)是你刪掉的耸三。一旦找到了就好辦了,有兩個(gè)辦法可以恢復(fù):
一個(gè)是在.git/logs/refs/stash文件中加一條記錄如下:
ID of previous stash commit in list or 0000000000000000000000000000000000000000 if none> Your Name
完成以后浇揩,你就可以在stash列表中看到你的被刪除的stash對(duì)象仪壮。
另外一個(gè)方法就是執(zhí)行g(shù)it stash apply命令直接恢復(fù)到working copy中,這個(gè)時(shí)候胳徽,最好保證你的working copy是干凈的积锅。命令如下:
git stash apply ID(the ID of stash commit)
執(zhí)行完畢爽彤,一切又都回來了!