其實你可以打撈文件。
原因是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並猜測其原始名稱。
那麼,那是什麼?我搞砸了。 – user3393589
簡答:是的。這應該教你製作備份副本的重要性。如果你確實需要這些數據,你可能會喜歡photorec這樣的數據雕刻工具。 –