2014-02-26 170 views
0

Soooo ....我做了「git reset HEAD myfilename」,它刪除了我所有的本地修改。我認爲我沒有對當地的回購進行任何承諾。如何恢復「混帳重置」更改?

有沒有辦法恢復已刪除的代碼? :L

+1

普通'git reset',又名'git reset --mixed',不會觸及工作文件。你有沒有做別的,也許'git reset --hard'? – torek

+0

沒有。我只是.. err ..試圖從提交中刪除文件,我想現在我明白git藏匿。但我沒有這麼做 - 很難確定,也不能在任何當地的分支機構找到我的變化。 – deb0rian

+0

其實這是我做的: '982 2014-02-25 12:48:28 git status 983 2014-02-25 12:48:38 git reset HEAD引擎/ SocialIntegFrontend。php 984 2014-02-25 12:48:46 git status 987 2014-02-25 12:49:06 git reset HEAD js/ModuleVk.js 988 2014-02-25 12:49:25 git checkout - - js/ModuleVk.js ' Unfixable,對不對? – deb0rian

回答

3

git reset HEAD filename剛剛送走緩存變化指數(基本上,撤消git add)。如果你有工作副本的變化,你不能再擁有他們,別的東西沒有他們在

當你這樣做:

git checkout -- js/ModuleVk.js 

這抓住了HEAD版本的js/ModuleVk.js寫道,到索引,然後將其寫入工作樹中。所以可能會發生破壞性的變化。

如果做到這一點之前git add,不過,回購包含在add發生時的工作文件的副本。你可以用git fsck --lost-found發現這一點,這將打印一些像這樣數量的消息:

dangling commit 7a07e53b3c753c93303c881605c81cc476c6a1de 
dangling blob 8177212592bb88a3c4614ee288d6a8a01dee0b42 
dangling commit 83630458b4317f5db42c3a306e299ca8c26a7ed9 
dangling blob b50f361891f38b85a5733b3124e261654ed457ad 
dangling blob b67bea2cf13d558e4092e9c1939b2273ac904f83 

當這一切都完成了你.git目錄將有一個名爲lost-found一個子目錄,這反過來將有一個名爲兩個子目錄commitother

other中的文件都有SHA-1名稱,所以你必須手動查看它們。應該很明顯哪些是.js代碼,但是要確定哪一個是哪個版本可能會非常棘手,這取決於您隨着時間的推移編寫了多少東西,但沒有實際提交。 (我習慣上git add東西,git diff --cached,決定改一些,git add再次,等等。每一個把另一個「晃來晃去的斑點」放到版本庫中,最終被gc化,磁盤空間很便宜。 。)

一旦你在那裏與文件完成後,你可以手動刪除.git/lost-found一切:

rm -r .git/lost-found 

(你可以用另一個git fsck --lost-found後重新生成它們,雖然一度垃圾收集收割晃來晃去的對象他們真的很好 - 但默認情況下,對於「新鮮」對象至少需要兩週)。

1

不,如果文件消失了,那麼它們就消失了。

如果你使用Eclipse,你仍然可以找到他們在當地的歷史(試比較... /本地歷史記錄......)