2011-06-07 196 views
77

我按照making github pages的說明操作,忘了進入我的git子目錄。結果,我只是用git clean -fdx加載了一個完整的文檔目錄。有什麼辦法可以解決這個可怕的錯誤嗎?我可以撤銷`git clean -fdx`嗎?

+2

我不確定,但我認爲這不可能與git。然而,對於你的文件系統的一個未刪除的實用程序可能會訣竅。 – 2011-06-07 15:02:01

+4

有趣的是,[Git Community Book](http://schacon.github.io/gitbook/5_creating_new_empty_branches.html)也暗示'git clean -fdx'沒有任何警告操作是如此危險。我想知道有多少人用這個看似無害的建議不可挽回地摧毀了他們的檔案。 – catpnosis 2016-02-09 05:15:38

+1

一定要檢查您的IDE是否有像Eclipse或IntelliJ IDE那樣的「本地歷史記錄」。這可以爲無意中的'git clean'調用節省很多心痛。此外,儘量擺脫不檢查清潔的習慣。創建一個可以調用的Powershell或Bash腳本,它將在您實際運行_incredibly_破壞性清理之前以確認提示運行'git clean -fdxn'。 – 2017-03-20 16:07:07

回答

87

否。這些文件已經消失。

(剛纔檢查在Linux上:git clean calls unlink(),並且不備份任何東西事先)

+13

如果您使用的是像RubyMine,Eclipse等高級IDE,機會是它將有一個刪除文件的本地歷史記錄,您可能可以恢復它們。 – Usman 2015-10-16 23:52:23

+1

@Usman在我的情況'git clean'意外刪除了'.idea'隱藏文件夾內的擱置變化,並且本地歷史保存了我! – emkman 2016-03-09 03:47:40

+0

偉大的提示由@Usman。使用Eclipse,我可以通過「從本地歷史記錄恢復...」選項獲取我的文件:http://i.imgur.com/XWNLOk5.gifv – brandizzi 2016-06-10 13:28:49

16

編號「git clean -fdx」會刪除git沒有從工作目錄跟蹤的所有文件和目錄。因爲Git不會跟蹤這些文件,所以它不會有這些文件的備份。至少通常不會。

如果你最近對這些文件中的一個做了'git add'(但中止了提交),你可以用'git fsck --lost-found'找到它。這是值得一試的,但不要讓你的希望過高。

在你應該考慮,而犯了幾次往往多幾次太少未來。這樣,即使最終沒有將這些提交推送到遠程,您至少也會擁有本地備份。

+0

真正的問題是目錄不應該是一個存儲庫。回想一下日誌,結果我忘了在'mkdir'之後忘記cd到新的repo目錄 – Eric 2011-06-07 15:07:58

+1

在讀完這個問題後不久,我給Git寫了一個補丁,添加了一個配置變量來備份每個被刪除的文件。也許它可能對別人有用? https://github.com/kusma/git/tree/work/clean-backup – kusma 2013-02-19 15:37:17

+0

今天我很幸運!感謝「git fsck --lost-found」。我使用以下來獲得所有更改: git fsck | awk'{print $ 3}'| xargs git show | tee searchresults.log 正如我想要的那樣,我已經添加,然後刪除了整個文件,我可以從日誌中得到它。 :) – 2013-11-09 15:53:56

6

我今天有這個問題。

正如其他人所說,git不保留這些文件。

撤消刪除工具的唯一方法是撤消刪除工具。我使用「extundelete」並恢復了所有內容,但是您的里程數/文件系統可能會有所不同。

+0

謝謝。 extundelete幫助! – dotnix 2015-02-04 19:08:46

31
git clean -fdxn 

會做dry run,並告訴你,如果你跑

git clean -fdx 

文件將被刪除(當然這僅僅是有益的,如果你知道這個時間提前,但是對於接下來的時間)

+4

爲了補充說明,'-n'對大多數git命令(以及許多其他* nix命令)都有效。 – 2013-11-09 20:57:47

4

正如@kusma上面提到的,如果你是幸運的(如果你沒有「混帳添加」),那麼你可以使用下面的提取整個對象:

git fsck | awk '{print $3}' | xargs git show | tee searchresults.log 

這樣,它會查找所有類型的塊,收集完整的差異並添加到可以提取丟失文件的文件中。就我而言,我已經失去了一整個Java類。

5

如果您在使用Eclipse,可能的解決方案之一是從本地Eclipse歷史記錄中恢復。

+2

即時通訊使用PyCharm和本地歷史救了我 – psychok7 2015-01-12 16:52:49

+0

@ psychok7:很高興知道,它爲你工作! – Abhinav 2015-01-12 16:53:58

+1

IntelliJ IDEA中的一樣東西! – arthurakay 2015-05-28 19:45:00

3

幸運的是,我犯了這個錯誤,而使用Windows 7又到回收站,強調所有被刪除的文件,並點擊「恢復」。完成。

2

其實!這個有可能!但不使用git命令。
我們需要的僅僅是一個像Recuva這樣的文件恢復工具。
只要提到它被刪除的路徑,並讓它恢復文件。

另外這裏是使用該應用的一些有用的注意事項:

  1. 我強烈建議你恢復 文件(當刪除的文件出現在恢復窗口)之前檢查此複選框:
    Advanced Mode - >Options - >Actions - >Restore folder structure
    有了這一切您的文件將通過保持夾 結構,那麼它會更容易,只需將從那裏被刪除丟棄 文件夾路徑被恢復。
  2. 安裝USB設備上的恢復工具,是非常理想
  3. 在談到恢復到的文件,避免選擇從哪裏文件相同的驅動器(因爲下面的警告),因爲如下─的地方刪除(再次上述警告),因爲當前恢復的文件可能會覆蓋尚未恢復的其他已刪除文件。將文件恢復到任何USB驅動器始終是一個很好的解決方案。

警告!只要您丟失(意外刪除)任何文件,請儘量不要觸碰(添加/編輯文件)驅動器的位置,以增加恢復成功的可能性。否則,您可能會完全丟失該文件。

它爲什麼有效: 當你刪除一個文件,實際上它並沒有被刪除。它只是被標記爲「已刪除」,因此下次將文件添加/更新到同一個驅動器時,這些舊文件將被新文件覆蓋。但是,直到它們被覆蓋時,仍然可以讀取(並且當然是恢復)這些文件。

+0

謝謝你救了我的命。我不知道它是否是正確的答案,因爲我無法恢復一切,但我很幸運,因爲我得到了我需要的最重要的文件。 – XzaR 2017-11-09 14:27:30

+0

--- Downvoter你能否提一下downvoting的原因? – 2018-02-18 09:11:11

+0

Recuva實際上爲我工作 – Emmanuel 2018-03-06 06:27:52