2014-03-07 33 views
1

我在做過一次新的回購之前,在新回購的ENTIRE目錄中做了git rm -r -f。我沒有分支。在第一次提交之前撤消git rm -r f(模棱兩可的參數「HEAD」)

我試過堆棧溢出的答案,但沒有幫助。我嘗試這樣做:

git reset --hard HEAD 

但得到這個:

fatal: ambiguous argument 'HEAD': unknown revision or path not in the working tree. 

有沒有什麼方法可以讓我得到的文件備份?

回答

0

由於您在進行任何提交之前刪除了數據,因此您丟失了數據。

git reset --hard不起作用,因爲您還沒有初始提交重置回。因此,'模棱兩可的論點'錯誤,git無法弄清楚你提到的是哪個提交,因爲沒有提交。

+0

那麼,那是什麼?我搞砸了。 – user3393589

+0

簡答:是的。這應該教你製作備份副本的重要性。如果你確實需要這些數據,你可能會喜歡photorec這樣的數據雕刻工具。 –

3

其實你可以打撈文件。

原因是git rm -r只會刪除位於索引中的文件,因此爲了刪除文件,您必須已經擁有這些文件。當你這樣做時,git使用BLOB內容的SHA-1「真實名稱」將每個文件的內容拷貝到存儲庫中。

如果您現在運行git fsck --lost-found,git將查找沒有引用的對象(也就是說,存儲庫中的所有對象)並打印dangling <type> <SHA-1>。對於每一個「斑點」(在這種情況下,它發現的一切)它的內容寫入.git/lost-found/other/下的SHA-1名:

$ git rm -r -f . 
rm 'bar' 
$ git fsck --lost-found 
notice: HEAD points to an unborn branch (master) 
Checking object directories: 100% (256/256), done. 
notice: No default references 
dangling blob f53433f357a56ddb698196519f30eb390ae684cb 
$ cat .git/lost-found/other/f53433f357a56ddb698196519f30eb390ae684cb 
this is file bar 
$ 

這也適用於倉庫是有一定的提交和是一個普遍的方法「恢復過去有參考但不再做的東西」。這會找到你在git add編輯的文件,然後用你在git commit之前的舊文件「頂部」編輯的新的,不同的內容替換。它還會發現任何「被遺棄」的提交,包括丟棄的git stashes。 (提交進入.git/lost-found/commit/。)

在上面的示例中,文件bar方便地在其內容中聲明爲文件bar。在大多數情況下,您必須查看每個恢復的blob並猜測其原始名稱。