フォルダー内のすべてのコンテンツを削除しましたが、フォルダーは空です。リモートリポジトリにまだコピーがありました。しかし、git pull
を実行したときに、削除されたファイルを元に戻さなかったのは、そうすることではないのでしょうか?
そこで、いくつかの調査を行ったところ、git checkout <revision> -- <name of file>
を実行することでファイルを元に戻すことができることがわかりました。
しかし、それはファイルに対してのみ機能します。
ディレクトリ内のすべてのファイルを取得するにはどうすればよいですか?
ファイルでできることはすべて、フォルダーでもできます。
また、 Gitリポジトリで削除されたファイルを見つけて復元する
変更をまだインデックス付けしていない場合(git add
)、ディレクトリのコンテンツを元に戻すことができます。
git checkout -- path/to/folder
削除のインデックスがすでに作成されている場合は、最初に削除する必要があります。
git reset -- path/to/folder
git checkout -- path/to/folder
git reset --hard HEAD
指定されたパスに影響を与えた最後のコミットを見つけます。ファイルはHEADコミットにないため、このコミットはファイルを削除している必要があります。
git rev-list -n 1 HEAD -- <file_path>
次に、キャレット(^
)記号を使用して、以前のコミット時にバージョンをチェックアウトします。
git checkout <deleting_commit>^ -- <file_path>
git reset --hard <revision>
変更をまだコミットしていない場合は、コンテンツまたはディレクトリを元に戻すことができます。
git checkout -- removed_directory
すべての変更を元に戻したい場合:
git reset --hard HEAD
私のために働いた唯一のことは、別のフォルダのレポをチェックアウトすることでした。現在のリポジトリが/home/me/current
にあると仮定します。
それから
git clone /home/me/current /home/me/temp
これにより、/home/me/temp
内のレポの個別のクローンが作成されます
これで、/home/me/temp
に移動して、好きなことを行うことができます。例えば
git reset --hard commit-hash-before-delete
削除したファイルフォルダーをコピーして戻すことができます
cp -r /home/me/temp/some/deleted/folder /home/me/current/some/deleted/folder
そして、一時フォルダーを削除します
rm -rf /home/me/temp
の例
git checkout -- some/deleted/folder
git checkout -- some/deleted/folder/*
動作しない
$ git checkout -- some/deleted/folder/*
zsh: no matches found: some/deleted/folder/*
$ git checkout -- some/deleted/folder
error: pathspec 'some/deleted/folder' did not match any file(s) known to git.
その他の例
git reset --hard HEAD
削除されたファイルだけでなく破壊的です。その他の変更も失われます。
同様に
git reset --hard some-commit
some-commit
の後にコミットが失われます
特定のファイルを指定しない場合、特定のコミットの全内容をプルできるはずです。 Like:git checkout 264794319e9695ba843cd6
(そのハッシュがすべてのファイルを正しい状態に持っていると仮定して)。
pull
がファイルを復元しないのは、gitが削除を最新の変更と見なし、それをプルするものの上に適用するためです。
(新しいブランチで実験することをお勧めします。)