Єдине, що мені вдалося, це перевірити репо в іншій папці. Припустимо, що поточне репо є /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
git status
дасть вам підказку про те, які команди виконувати