web-dev-qa-db-ja.com

削除されたファイルを復元できます( `git clean -fdx`を元に戻します)?

githubページを作成する の指示に従い、gitサブディレクトリに移動するのを忘れていました。その結果、ドキュメントのディレクトリ全体をgit clean -fdxで無効にしました。
この恐ろしい間違いを取り消す方法はありますか?

107
Eric

いいえ。これらのファイルはなくなりました。

(Linuxで確認しただけです: git clean calls unlink() 。事前に何もバックアップしません。)

115
Mat
git clean -fdxn

ドライラン を実行し、実行した場合に削除されるファイルを表示します

git clean -fdx

(もちろん、これは事前にこれを知っている場合にのみ役立ちますが、次回は役立ちます)

44
Peter Ajtai

いいえ。「git clean -fdx」は、gitが作業ディレクトリから追跡しないすべてのファイルとディレクトリを削除します。 Gitはこれらのファイルを追跡しないため、これらのファイルのバックアップはありません。少なくとも通常はそうではありません。

比較的最近これらのファイルの1つで「git add」を実行した場合(ただし、コミットを中止した場合)、「git fsck --lost-found」でそれを見つけることができます。試してみる価値はありますが、期待を高めすぎないでください。

将来的には、まれに数回コミットするよりも、数回コミットすることを検討する必要があります。そうすれば、これらのコミットをリモートにプッシュしなくても、少なくともローカルバックアップができます。

17
kusma

IntelliJ/Android Studioでは ローカル履歴からファイルを復元する が許可されます。

13
Y2i

Eclipseで作業している場合、考えられる解決策の1つは、Eclipseのローカル履歴から復元することです。

7
Abhinav

前述の@kusmaのように、lucky(「git add」を実行したことがある場合)の場合、次を使用してオブジェクト全体を抽出できます。

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

そのようにして、すべてのタイプのチャンクを探し、差分全体を収集し、失われたファイルを抽出できるファイルに追加します。私の場合、Javaクラス全体を失っていました。

7

今日この問題がありました。

他の人が言ったように、gitはファイルを保持しません。

これを取り消す唯一の方法は、削除取り消しユーティリティを使用することです。 「extundelete」を使用してすべてを回復しましたが、マイレージ/ファイルシステムは異なる場合があります。

6
dougallj

実際にはい!これは可能です!ただし、gitコマンドは使用しません。
必要なのは、 Recuva のようなファイル回復ツールだけです。
削除された場所からのパスに言及し、ファイルを回復させます。

また、このアプリを使用する際の便利な注意事項もいくつかあります。

  1. ファイルを復元する前にこのチェックボックスをチェックすることを強くお勧めします(削除されたファイルがリカバリウィンドウに表示される場合)
    Advanced Mode-> Options-> Actions-> Restore folder structure
    これにより、すべてのファイルはフォルダー構造を維持することで復元されるため、削除した場所からそのフォルダーをパスにドラッグアンドドロップするだけで簡単になります。
  2. USBデバイスに回復ツールをインストールすることをお勧めします(以下の警告のため)
  3. ファイルを復元する場所について言及しながら、avoid現在復元されているように、ファイルが削除された場所から同じドライブを選択します(これも後述の警告のため)ファイルは、まだ復元されていない他の削除されたファイルを上書きする可能性があります。ファイルをUSBドライブに復元することは、常に適切なソリューションです。

警告!ファイルを紛失(誤って削除)したらすぐに、削除元のドライブに触れない(ファイルの追加/編集)ようにしないでください正常な回復の可能性を高めます。そうしないと、そのファイルが完全に失われる可能性があります。

それが機能する理由:ファイルを削除しても、実際には削除されません。 「削除済み」とマークされているため、次回同じドライブにファイルを追加/更新すると、古いファイルは新しいファイルで上書きされます。しかし、それらが上書きされるまで、ファイルの読み取り(および当然のことながら回復)は可能です。

5
Just Shadow

Jetbrains IDEを使用している場合、ファイルのローカル履歴を表示するオプションがあります。 git cleanを実行した場合、ファイルを再作成し、ファイルのローカル履歴を確認して、そこから復元できます。

単一のファイルで私のために働いた。完全なディレクトリについては、その方法がわかりません。

4
Rajesh Paul

MSBuildでgitを使用している場合、すべてのファイルをコピーしてからgit clean -xdfを実行するターゲットを作成しました。これにより、削除したくないものを削除したことに気付いた場合、ファイルを簡単に復元できます。こちらをご覧ください: http://blog.3d-logic.com/2012/11/04/safe-git-clean-with-msbuild/

1
Pawel

幸いなことに、Windows 7の使用中にこの間違いを犯しました。ごみ箱をリサイクルし、削除されたすべてのファイルを強調表示して、[復元]をクリックしました。できた.

0
Matt Cashatt

リポジトリに追加するはずのコードを使用し、-dfxを使用してファイルを復元できるようにしました。

Debugfs、iノード、testdisk、および表示される他の多くのツールからルックアンドリンクを使用しようとしましたが、この愚かな書き込みが誤って消去したディレクトリは見つかりませんでした。

Sourceforgeから extundelete をダウンロードします。
おそらく e2fslibs-devパッケージ をインストールする必要があります。
実行

$ ./configure 
$ make 

Srcフォルダー内にextundeleteのバイナリーが生成されます。私の場合、誤ってフォルダーを消去しました。 FOOBARと呼びましょう

私はちょうど走った:

$  Sudo ./extundelete --restore-directory <full path to FOOBAR > <the partition> 


RESTORED_FOLDERSという名前のフォルダーを作成しました

0
motbus