2010-05-06 93 views
4

我是git noob,git剛剛刪除了一堆重要的文件。我如何讓他們回來?如何恢復被git刪除的文件?

我在本地機器上有一個回購。爲了進入git,我只需右鍵單擊我的項目文件夾並選擇「git bash here」。這引起了我所做的所有選擇。

所以我有一些變化階段,我做:

git add . 

此上演了一堆的變化。我注意到,我不想要其中的一些上演,所以我決定,我會試圖取消everthing。我這樣做:

git reset --hard HEAD^ 

這基本上刪除了一堆我上次提交併跳到提交前的文件。

如何獲取這些文件?如果我不能通過git做到這一點有另一種方式?

+0

http://stackoverflow.com/questions/1108853/recovering-added-file-after-doing-git-reset-hard-head – tanascius 2010-05-06 10:47:38

回答

9

我對我的原始建議進行了更正(請參閱編輯歷史記錄)。作爲懺悔,我已經找到了最簡單的方法,從git的恢復丟失的文件:

git fsck --lost-found 
ls .git/lost-found/other 

不幸的是,文件名都輸了,但內容都應該有作爲不同的文件。

+1

可能的重複他使用'git add .' ...所以他應該是能夠恢復 – tanascius 2010-05-06 11:03:07

+0

fsck會影響我的回購嗎?因爲我已經做了: git reset --hard {removed head} 找回一些變化。但我仍然需要恢復我的無限改變 – Ryan 2010-05-06 15:17:30

+0

如果您擔心的是,只需使用git以外的其他備份整個回購。但我不認爲fsck會損害任何東西。 – 2010-05-06 22:57:03

1

不,與

git reset --hard HEAD^ 

更改將恢復到最後一次提交和永久丟失。

+1

他用過'git add .' ...所以他應該能夠恢復 – tanascius 2010-05-06 11:03:28

0

從這個SO-Question


你可以(有一些工作)在最後恢復文件的狀態 「混帳添加<文件>」。您可以使用

$ git fsck --cached --no-reflogs --lost-found --unreachable HEAD 

,然後檢查「.git/lost-found/blob/」目錄中的文件。

請閱讀git fsck manpage:我沒有檢查過上面的調用。


1

這聽起來像你想的老人頭(相對於HEAD ^),在這種情況下,你可以簡單地檢查出那個版本。使用git reflog顯示以前的HEAD並查找所需的提交,然後檢查出來。

如果您想要在重置之前執行的文件,請參閱其他答案。

+0

好的建議 - 當然reflog將有助於恢復最後的提交...與我的fsck解決方案一起,他應該能夠恢復所有文件。 – tanascius 2010-05-06 20:02:06