2009-07-28 167 views
3

該問題與問題"How to restore Git after fatal file system error?"有關,但僅適用於單個文件。從Git恢復文件?

我需要得到最後的狀態2009-07-27 23:58,在那裏我需要的文件:

/Users/henri/BAckup/6-relationdiagram/Normalized_perhaps_DB/simple_schema0.tcuml 

我怎樣才能恢復文件崩潰後?

ADDED:我在哪裏可以找到該文件?他們應該做什麼?

格雷厄姆的尖端

$git checkout 63c6844fded9cfcdee14c9330be82557046b3e56 HENRI_suunnittelu_doc/6-relaatiotietokantakaavio/Normalized_perhaps_DB/simple_schema0.tcuml 

威廉的尖端

git checkout bee6763b55cf8259438aa575cedbb09d1d02b96a HENRI_suunnittelu_doc/6-relaatiotietokantakaavio/Normalized_perhaps_DB/simple_schema0.tcuml 
+0

錯誤答案已更正。它應該是--since ='...'(添加'=') – 2009-07-28 16:21:50

回答

2

有時我刪除我的git本地文件或目錄,我想恢復該文件。我運行以下命令:

git checkout -- filenameOrDirectory 

請注意中間的空格。

4

如果你需要得到一個魚貫而出的承諾是在你的倉庫,然後git的結帳時會做爲你。具體做法是:

git checkout <sha> <filename> 

將檢索提交< SHA文件<文件名>>到您當前的工作副本。可以是任何提交的引用,所以它可以是分支名稱,標籤名稱,HEAD ^^^^,或者任何類似於你想要的東西...

+0

「不只是一個類圖」是該提交的日誌消息,而不是提交ID。您需要某種方式來引用提交 - 例如提交的SHA1 ID。 git日誌應該能夠給你。 – Graham 2009-07-28 11:58:11

+0

我應該在哪裏運行命令?我更新了錯誤。 – 2009-07-28 13:20:56

+1

更改到你的git目錄的頂層。運行'git ls-tree -r --name-only master'來檢查你想恢復的文件是否在'master'中(從包含的截圖看起來像2009-07-27 23:58狀態)。運行`git checkout master - `,其中``出現在git-ls-tree的輸出中 – 2009-07-28 14:12:32

1

你有沒有腐敗的副本資源庫在哪裏如果是這樣,從那裏拉到你的工作目錄,然後檢出文件。你可以這樣做:

 
git log --since='2009-07-27 23:58' --pretty=oneline -n 1 

得到你想要的哈希值,然後通過獲取文件:

 
git checkout <file> <hash> 

如果你有倉庫的不廉潔的工作副本,你可以嘗試「混帳的fsck」,但是如果文件丟失了,你的成功機率很小或爲零。