some_dir_path
でgit repo を初期化しましたgit init
。その後、すべてのファイルを repo に含めないことにし、 を発行しましたgit rm -f
。思ったとおり、ディレクトリ自体からではなく、git repo からすべてのファイルが削除されます。これで、some_dir_path
.git 自体を除いて、これは空になります。
ls -aR some_dir_path:
.git:
branches config description HEAD hooks index info objects refs
...
それで、質問は、データを復元する方法があるかどうかです。 コミットは発行されておらず、復元する
ブランチもありませんでした。git rm -f
答え1
いずれのファイルもコミットされていなかったため、失われてしまいました。
もしコミットされていたら、あなたは発行することで回復できたでしょう
git reset --hard
これにより、最後のコミット以降に削除されたファイルが復元され (他のファイルに加えられた変更も元に戻されます)。
も参照してくださいgit reset --help
。
答え2
はgit rm
コミットされていないので、手順は非常に簡単です。
開始点: 「onefile」が追加されます:
$ git cat-file -p HEAD:onefile
content...
$ cat onefile
content...
さてgit rm
、:
$ git rm -f onefile
rm 'onefile'
$ ls
ファイルは本当に消えてしまいました。gitコマンドはコミットされていません。(行rm 'onefile'
は出力(コマンドではありません!)
今ここでのアドバイスは簡単です。慌てずに概要を把握してください。
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
deleted: onefile
したがって、ヒントに従ってください:
$ git reset HEAD *
Unstaged changes after reset:
D onefile
削除は、コミットされていない状態からステージングされていない状態になりました。
$ git archive HEAD -o playback.tar
$ tar xf playback.tar --to-stdout
content...
がgit rm
コミットされる場合は、 がgit reset HEAD~
必要です。
直後にリポジトリが空の場合git init
、git rm
コマンドは「安全」です。
$ git rm *
fatal: pathspec '*' did not match any files
Q は init と rm の間に何が起こったかを隠します。git add だったのでしょうか?