「git rm」後の復元

「git rm」後の復元

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 initgit rmコマンドは「安全」です。

$  git rm * 
fatal: pathspec '*' did not match any files

Q は init と rm の間に何が起こったかを隠します。git add だったのでしょうか?

関連情報