昨日、masterブランチにいくつかの変更を加えたが、それらを追加してコミットするのを忘れたとしましょう。そして朝に私はやった
git reset --hard
この状況で削除されたファイルを復元することは可能ですか?
一部の優れたIDEは、ローカルの履歴としてファイルを追跡します。外部からファイルを削除した場合(たとえば、git reset
)親ディレクトリをクリックしてIDEをクリックし、[ローカル履歴と比較]を選択できるはずです。
この機能をPHPStorm
IDEで正常に使用しましたが、追跡されていないファイルがユーティリティによって一掃されました...
いいえ…………そうではありません。
git reset --hard
は非常に危険なコマンドなので、次回使用するときには注意が必要です:)
これらのファイルのコミットがない場合は、復元できない可能性があります。
それ以外の場合は、reflogコマンドが役立ちます。
(注:承認された回答が投稿されたため、手順が少し変わったようですが、考え方は同じです。)
受け入れられた回答に追加するために、Webstorm 2016を使用して削除したファイルを復元することができました。
git clean -f
を使用して強制クリーンを実行してファイルを失いました。それを回復するために、私はWebstormに行き、次の手順を実行しました。
プロジェクトの[プロジェクト]タブに移動し、右クリックして[ローカル履歴]の[履歴の表示]を表示します。 ( この画像に示すように )
「Show History」をクリックすると、「External Change-> Revert」が含まれたポップアップが表示されます。クリックして、右側の目的のファイルを元に戻します。 ( 添付の画像に示すとおり )
上記の2つの手順が完了すると、[プロジェクト]タブにファイルが表示されます。 「ローカル履歴」ポップアップは、この添付画像のようなものを表示します。 Reverted to External Change Gitに追加するオプションを取得します。
追跡を解除するには、コマンドラインからgit reset HEAD <filename>
を実行します。
git reset --hard
は追跡されていないファイルを削除しません。 git clean
は、しかし、します。
ただし、git add
ファイル、しないでくださいgit commit
それらを実行してからgit reset --hard
それらのファイルは失われます。
この答え に示されているように、それらは回復できるため、問題ありません。 (まあ、次までgit gc
)。
追跡されていない削除済みファイルの以前のバージョンにはgitからアクセスできません。これは、コーラスのために存在しないためです。私はそれらをいくつかのバックアップから復元するでしょう(おそらくide/editorによって隠されたバックアップファイルが残っているのでしょうか?)、あるいは、そのファイルシステムでの作業を過度に避け、復元ツールの検索を開始します。
git fsck
がお手伝いできる場合があります。
まだガベージコレクションを実行していない場合は、役立つ場合があります。 BLOB IDを取得したら、次のように言うことができます。
git show {blobId}