Gitで必要なファイルを間違って削除してことはありますか?このようなミスを起こってしまったら、大変なことになるかもしれません。そこで今回はMiniToolより、Gitで削除されたファイルを回復する方法5つ紹介したいと思います。

Gitとは

Git で誤って削除したファイルを復元する方法を説明する前に、まず Git とは何かについて見てみましょう。

Gitは、ソフトウェア開発においてソースコードを共同開発するプログラマー間の作業を調整するために使用されるオープンソースの分散型バージョン管理プログラムです。このソフトウェアは、ファイルを保存し、任意のファイル集合の変更をリポジトリで追跡することができます。

では、リポジトリとは何ですか?Gitを使ってソフトウェアを開発する場合、まずGitをインストールし、次にリポジトリを作成する必要があります。そして、このリポジトリにソフトウェア開発用のファイルをアップロードします。このリポジトリ内のファイルはすべてGitで管理することができます。

Gitは各ファイルの変更(修正と削除)を追跡し、開発者が将来的にファイルを復元できるように完全な履歴を残しています。

提示: 既存のソフトウェア開発プロジェクトに参加する場合、既存のGitリポジトリをクローンして、完全なローカルコピーを自分のPCに作成することができます。リポジトリをクローンすると、そのリポジトリのすべてのコミットやブランチがダウンロードされます。

Gitでファイルを削除する方法

Gitを使用してプログラミング開発する場合は、リポジトリをローカルPCにコピーし、ローカルPCで作業することができます。また、Gitでファイルに変更を加える場合、ファイルは以下の段階を経ることはあります。

  • Untracked:コードファイルを編集した後、そのファイルがGitにアップロードされていない場合、そのファイルは「untracked」の状態となります。
  • Tracked:Gitに追加されたファイルは、「tracked」の状態です。Gitからコピーしたファイルは、すべて追跡状態にあります。また、追跡状態には、「modifiedstagedcommit 」という3つのサブ状態があります
  • Modified:(作業ディレクトリ内で)ファイルが変更されたが、まだローカルリポジトリに保存されていない状態。
  • Staged:修正されたファイルは、次のコミットされたスナップショットに含まれるようにマークされています。
  • Committed:ローカルリポジトリに安全に保存された状態です。

続いて、ローカルリポジトリとリモートリポジトリを同期させます(一部の開発者は、GitHubをリモートリポジトリとして利用することもあります)。

ところで、Gitでファイルを削除したいときはどうすればいいですか?次の手順に従って行いましょう。

ステップ1(オプション):「git clone + url」コマンドで、リモートリポジトリをローカルPCにコピーします。ここのurlは、リモートリポジトリを保存しているサーバーのパスとなります。

GitHubのリポジトリをクローンして複製する方法

ステップ2:Gitからファイルを削除します。

  • 作業ディレクトリからのみファイルを削除する場合は、コマンド 「rm + filename 」を実行してください。
  • ステージング・エリアと作業ディレクトリの両方からファイルを削除するには、コマンド「 git rm + filename 」を実行してください。
  • 削除したいファイルがインデックスにアップロードされている場合は、コマンド「 git rm -f + filename 」でステージング領域と作業ディレクトリから強制的にファイルを削除します。
  • ファイルをステージング領域から削除したいけれども作業ディレクトリには残しておきたい場合は、コマンド「git rm –cached + filename」を実行します。

ステップ3:コマンド「git commit -m “delete + filename”」を利用して削除操作をローカルリポジトリにコミットします。

提示:rm + filename 」コマンドでファイルを削除した場合、削除操作をコミットする前に 「git add/rm + filename」 コマンドでその操作をステージングエリアに追加しておくとよいでしょう。

ステップ4:「git push」コマンドで削除操作をリモートリポジトリにプッシュします。

「git push」コマンド

おすすめ記事:【修正】’git’ は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。

Gitで削除されたファイルを回復する方法

間違ってGitからファイルを削除してしまった場合、いくつかの簡単な方法で取り戻すことができます。しかし、Git で削除操作を取り消す前に、まずファイルがどのような状態であるのかを把握する必要があります。そのためには、「git status」 コマンドでチェックしましょう。このコマンドは、前回のコミット以降に変更されたファイルがあるかどうかを表示することができます。そして、変更されたファイルの状態も表示されます。

提示: このコマンドを直接適用すると、変更されたすべてのファイルを一覧表示することができます。もちろん、このコマンドを特定のディレクトリに適用することもできます。cdコマンドを使ってそのディレクトリに移動する必要があるだけです。

git ステータス

一般に、「git status」コマンドを使用した場合、削除されたGitファイルは以下のステータスになります。

  1. Changes not staged for commit. Deleted: filename. ファイルを削除したが、削除操作がステージングエリアに追加されていないことを意味します。
  2. Changes to be committed. Deleted: filename. 削除操作がステージングエリアに追加され、操作がステージングされた状態にあることを意味します。
  3. Your branch is ahead of “xx” by 1 commit. 削除操作をローカルリポジトリにコミットしたことを意味します。
  4. 上記のケースに加えて、削除操作をリモートリポジトリに同期させたケースもあります。しかし、git statusコマンドではコミットされたファイルは表示されないので、git logコマンドを使う必要があります。

Git で削除されたファイル

状況に応じて、Gitから削除されたファイルを復元するための適切な方法を選択することができます。以下、どのような方法があるのか、詳しく説明します。

おすすめ記事:Gitignoreが動作しない場合の対処法

1.「Changes not staged for commit」の場合

rm + filenameコマンドでファイルを削除したが、git add/rm + filenameコマンドで削除操作をステージングエリアに追加していない場合は、ファイルの状態を確認するとこのメッセージが表示されます。

この場合、Git にファイルの削除を解除させるには、コマンド「git checkout – filename.」を実行してください。

2. 「Changes to be committed」の場合

このステータスメッセージは、削除操作をステージングエリアに追加した場合、あるいは git rm + filename コマンドで Git ファイルを直接削除した場合に表示されます。

そのため、この場合の削除操作を取り消すには、git reset HEAD + filenameコマンドでステージングエリアから削除操作を取り消し、git checkoutコマンドでファイルを回復することができます。

おすすめ記事:「Add-apt-repository」コマンドが見つからないエラーの修正方法

3. 変更がローカルリポジトリにコミットされた場合

削除操作をローカルリポジトリにコミットしてしまった場合、削除されたファイルをGitに復元させるために、リポジトリのバージョンをロールバックする必要があります。詳しい手順は以下の通りです。

ステップ1: git log コマンドで、Git リポジトリのすべてのバージョンを表示します。バージョンのリストが長すぎる場合は、git log –pretty=oneline コマンドで簡単なリストを表示することができます。さらに、日付を指定してバージョンの数を減らすこともできます。

 git reset --hard + version IDコマンド

ステップ2:「git reset –hard + バージョンID」のコマンドで、選択したバージョンにロールバックします。まだファイルが削除されていないバージョンを選択する必要があります。IDは最初の数文字だけ入力すれば、そのバージョンが一意であることを示すのに十分です。これで、削除されたGitファイルが復元されます。

4. リモートリポジトリに変更が同期された場合

この場合は、リポジトリのバージョンをロールバックする必要もあります。ケース 3 で説明したとおりにすればよいのです。そして、ロールバックしたバージョンをリモートリポジトリにプッシュするには、git push -f コマンドを使います。

デフォルトでは、Gitは高いバージョンのリポジトリが低いバージョンを上書きすることだけを許可します。そのため、下位のバージョンで上位のバージョンを上書きしたい場合は、git push コマンドに “-f” を追加します。これは、ローカルリポジトリを強制的にリモートリポジトリにプッシュすることを意味します。

おすすめ記事:git エラーコード error: src refspec master does not match any の対処法

5. 上記すべての方法が失敗した場合

上記の方法がすべてうまくいかず、誤って削除したファイルをGitから復元できない場合、プロファイル復元ソフトウェアであるMini Tools Partition Wizardを試すことができます。 ここでは、本ソフトウェアの使用方法について説明します。

MiniTool Partition Wizard Freeクリックしてダウンロード100%クリーン&セーフ

ステップ1: MiniTool Partition Wizardを起動してメインインターフェイスに入ります。すると、画面上部のツールバーから「データ復元」機能をクリックします。

「データ復元」機能をクリック

ステップ2:次のウインドウで、「フォルダーを選択」タブにカーソルを合わせて、「参照」ボタンをクリックします。すると、削除されたファイルが元に保存されているフォルダを選択して続行します。

提示: Gitファイルが元に保存されているフォルダが分からない場合は、Gitがインストールされているパーティションをスキャンするか、ハードドライブ全体をスキャンしてください。しかし、こうするとスキャン処理により長い時間がかかります。

スキャン場所を選択

ステップ3:スキャン処理が完了するまで待ちます。スキャン結果が一覧表示されたら、復元したいファイルを見つけて、その前のボックスにチェックを入れて、「保存」ボタンをクリックします。そして、安全な場所を選択して復元したいファイルを保存します。

提示:

  1. 削除されたGitファイルを速く見つけるために、「タイプ」タブに切り替えることをお勧めします。各ファイル タイプのフォルダを展開して、削除されたGitファイルを探します。
  2. 復元されたファイルをGitファイルが削除されたパーティション/ディスクに保存しないでください。さもないと、削除されたファイルが上書きされる可能性があります。

MiniTool Partition Wizard には、ターゲット ファイルをすばやく検索するために、以下のツールも用意されています。

  • 検索: 名称通りにデータを検索することができます。ただし、MiniTool Partition Wizardがファイル名の復元に失敗する場合もありますので、ご注意ください。この場合、復元されたファイルの名前が変更されます。
  • フィルター:ファイル拡張子、ファイルサイズ、ファイルの作成日または変更日に応じてファイルを検索することができます。
  • プレビュー:最大 70 種類のファイルをプレビューできるので、見つかったファイルが復元したいものであるかどうかを判断することができます。

スキャン結果を素早く検索

結語

この記事はGitで誤って削除されたファイル/フォルダを回復する方法を紹介しました。これらの方法にはご参考になされましたら幸いです。また、もしMiniToolについて何かご質問/ご意見がありましたら、お気軽に[email protected]までご連絡ください。

  • reddit