2012-03-10 18 views
9

は私がやった:背面に移動するには何のHEADがないどうやらので 最初のコミットなしでgit rm -rf dirnameを元に戻す方法は?

git init 
git add . 
git rm -rf dirname 

は、 git reset --hard HEADgit checkout -fgit reflogは動作しませんでした、他のanswsersを見ると、また戻ってからファイルを取得することを約束します。

ファイルを戻す方法はありますか?

答えて

8

ありません。

通常、git rmは、ファイルを削除する前に既にコミットされているかどうかをチェックするので、作業を失うことはありません。ただし、-fを使用すると、このチェックが無効になります。要するに

  • -fを使用しないでください。
  • あなたがコミットしていないものには触れないでください。
+2

unixのように - '-f'はあなたがしていることをよりよく理解することを意味します。 –

1

いいえ、私が知る限り。私はgitがファイルをリンク解除すると信じます。ちょうどrm -rfのようにします。それがファイルについて知っているかどうかに関わらず、それは問題ではありません、それは喜んでディレクトリを核にします。本当に、唯一の手段は、ファイル復旧ツールをと同じように使用することです。rm -rf

0

Gitがdirnameディレクトリを追跡していない場合は、それはそれについて知っていないとあなたがgit rm -rfとディレクトリを削除することはできません。あなたは(だろう)あなたはgit initgit add .またはgit add dirname行っていた場合にのみ、方法削除した可能性がある

fatal: pathspec 'dirname' did not match any files 

のようなエラーが発生します。そうであれば、ファイルは消えてしまい、決してコミットされなかったり、gitがそれを追跡しなかったりするので、それらを取り戻すことはできません。これは、通常のフォルダにrm -rfをしていると同様に良好である(そして、あなたがバックアップを持っていない限り、回復することはできません)

+0

それはありますか?私はそれをテストしなかったが、私は、-fフラグがそのエラーを抑制すると考えた。 – Matt

+0

'-f'を使わないと?それは、「最新のチェックを無効にする」という意味です。 –

+0

@Matt - それはそれを抑制しません。 'git rm'の' -f'は、最新のチェックを上書きするだけです。 – manojlds

0

git reset --hardは削除がまだコミットされなかった助けたと、一般的に言えば、削除はCtrl+Z

1

によって中断されました警告-nオプション(1)を使用しないでgit pruneを実行すると、到達不能データが消去されます。

git prunegit cat-fileを使用する方法があります。オブジェクトgit prune -n意志のリストを実行

は剪定によって除去される。

$ git prune -n 
9cc84ea9b4d95453215d0c26489d6a78694e0bc6 blob 
c315143703752ef4d11ca7d93f2c324872b2ebff blob 

各行が削除されたファイルに対応しています。

NAME:git pruneドキュメントから

git cat-file -p 9cc84ea9b4d95453215d0c26489d6a78694e0bc6 > restored-filename.whatever 

(1):

は今、git cat-fileを使用して、我々は新しいファイルに削除されたファイルの内容を復元することができます
git-prune - 到達不能オブジェクトをオブジェクトデータベースから削除する

オプション
-n
--dry-run
何も削除しないでください。それが削除するものだけを報告してください。

関連する問題