FileFix Ultimate
日本語

削除したソースコードやプロジェクトフォルダーを復元する方法

削除したソースコードは、ディスク以外の場所、つまりgitのリモート、ローカルリポジトリ、エディターのローカル履歴から戻すのがたいてい一番簡単です。ディスクのスキャンは最後です。プレーンテキストには確かなシグネチャがなく、ファイルシステムの記録が残っているときにだけ名前付きで戻るからです。

最終更新:

今すぐ行うこと

  1. ごみ箱を確認し、リモートにプッシュしていたならリポジトリをクローンし直します。
  2. .gitフォルダーが残っていれば、git restore、git reflog、git stashでファイルやコミットを戻します。
  3. コミットしていない作業は、VS CodeのタイムラインやJetBrainsのローカル履歴を確認してから、USBで起動したツールでドライブをスキャンします。

手順

  1. ビルドを止めてごみ箱を確認

    そのドライブでパッケージのインストール、ビルド、テストを実行しないでください。数千のファイルが書き込まれます。まずごみ箱を見ます。エクスプローラーや多くのIDEから削除するとごみ箱に入りますが、rm -rf、del、Remove-Item、git cleanなどのコマンドはごみ箱を通りません。

  2. リモートからクローンし直す

    GitHubやGitLabなどのサーバーにプッシュしていたなら、新しいフォルダーにクローンし直します。コミットしてプッシュした内容はそのまま戻ります。欠けるのはプッシュしていないローカルの作業だけです。

  3. .gitが残っていればgitを使う

    一部のファイルだけ消したなら、git statusで一覧が出て、git restoreにパスを付ければ通常は最後にコミットした版が戻ります。誤ってgit reset --hardをした場合は、git reflogで以前のコミットを見つけて戻れます。退避した作業はgit stash listで確認します。git addでステージしただけでコミットしていないファイルは、git fsck --lost-foundで見つかることがあります。

  4. エディターのローカル履歴を確認

    VS Codeではファイルのタイムラインを開きます。ローカル履歴はプロジェクトとは別に保存されています。削除したファイルなら、同じパスに空のファイルを作ると以前の履歴が表示されることがよくあります。JetBrains系IDEでは、プロジェクトフォルダーを右クリックしてLocal HistoryのShow Historyを開くと、削除したファイルが一覧に出て元に戻せます。

  5. ドライブでフォルダーをスキャン

    USBメモリーに入れたポータブル版FileFix Ultimateを起動し、削除ファイルの復元を開いてドライブを選び、バランス スキャンを始めます。フォルダーツリーでプロジェクトのパスを開くか、cs、py、js、ts、javaなどの拡張子で絞り込みます。依存関係やビルドのフォルダーは作り直せるので省きます。

  6. 別の場所に保存してコードを確認

    復元したフォルダーを別の物理ディスクに保存します。新しい場所で開いてビルドとテストを実行し、git diffでリモートと比べてください。一部が上書きされたファイルも一見正常に見えます。

gitがディスクのスキャンより有利な理由

.gitフォルダーには、追跡している全ファイルのコミット済みの全版が圧縮されて入っています。ローカルでもリモートでもこれが残っている限り、コミットしたコードは実質的に失われておらず、正しいコマンドを使えば戻ります。ただし.gitごとフォルダーを消すと、プッシュしていない限り履歴も消えます。

コミットしていない変更は別です。gitは一度も見ていないので、現実的な手がかりはエディターのローカル履歴、未保存タブのエディターのバックアップ、そしてディスクそのものです。FileFix Ultimateの保存できなかったファイルを探す機能はVS CodeやNotepad++のバックアップも探すため、エディターが閉じたときに開いていたタブのコードが残っている場合があります。

ソースファイルに対して復元スキャンができること、できないこと

写真や文書は見分けのつく先頭部分で始まるため、ファイルシステムが忘れていてもシグネチャ検索で見つかります。ソースコードにはそうした先頭部分がありません。コードの復元はファイルシステムの記録しだいで、削除したフォルダーのNTFSの項目が残っていれば名前、パス、フォルダー構造が一緒に戻り、再利用されていればテキストファイルは事実上見つかりません。

NTFSではごく小さなファイルがファイルの記録そのものに格納されることが多く、大きなファイルが消えても短い設定ファイルやソースが残ることがあります。プロジェクト内の画像、圧縮ファイル、SQLiteデータベースなどのバイナリはシグネチャで見つかりますが、名前はありません。

WSLや仮想マシンの中のプロジェクト

WSL 2の中のコードは、通常ext4.vhdxという仮想ディスクファイル内のext4に保存されています。wsl --shutdownを実行してからそのファイルを別のディスクにコピーし、コピーを開いてください。FileFix UltimateはVHDXイメージを開き、ext4を読み取り専用で読めます。ext4で削除したファイルはNTFSより名前付きで戻しにくい点に注意してください。仮想マシンのVMDK、VHDX、QCOW2も同じように開けます。

復元できない場合

  • 開発用PCの多くはTRIMが有効なSSDで、削除したファイルがほぼすぐに消去されることがあり、その場合コミットしていないコードは戻らないかもしれません。
  • 削除後に同じドライブでパッケージのインストールやビルドをしたなら、空き領域はすでに再利用されている可能性が高いです。
  • ファイルシステムの記録が残っていなければ、プレーンテキストのソースはシグネチャで見つけられません。
  • コミットもプッシュもせず、エディターの履歴にもない作業は、領域が上書きされると戻せるコピーがありません。

FileFix Ultimateでできること

  • 復元量の制限がなく個人利用は無料で、USBから動くポータブル版があるため、開発用ドライブに新しい書き込みをしません。
  • NTFS、FAT32、exFATの記録から削除したフォルダーツリーを再構成し、記録が残っていればファイル名とパスを保ちます。
  • 保存できなかったファイルを探す機能で、未保存タブのVS CodeやNotepad++のバックアップを見つけます。
  • WSLや仮想マシンのコードのために、VHDX、VMDK、QCOW2イメージを開き、ext4を読み取り専用で読みます。

FileFix Ultimate は個人利用なら無料で、オフラインで動作し、復元元のドライブには書き込みません。業務利用にはPC 1台ごとに1年間のライセンスが必要です。実行前に署名を確認してください。

よく寄せられる質問

git reset --hardをしてしまいました。コミットは戻りますか?

たいていは戻ります。git reflogでリセット前のコミットを探し、そこにブランチを作るかリセットし直してください。コミットしていない変更はreflogになく、ステージしたものだけgit fsckで見つかることがあります。

git cleanで消したファイルはごみ箱に入りますか?

いいえ。git cleanは追跡していないファイルを直接削除するので、ごみ箱には出てきません。残る手段はエディターのローカル履歴かディスクのスキャンです。

node_modulesやビルドフォルダーも復元すべきですか?

いいえ。プロジェクトのファイルとロックファイルから作り直せるので、ソースが戻ってから再インストールするほうが速く安全です。

復元したファイルは名前とフォルダーが元のままですか?

ファイルシステムの記録から見つかった場合はそうです。ソースファイルは他の方法では見つからないので、フォルダーツリーに出てくるファイルは通常名前付きで出てきます。

このページを共有