Как восстановить целую директорию из истории репозитория git?

Я хотел бы восстановить целую директорию (рекурсивно) из истории моего репозитория git.

Существует только 1 ветвь (мастер).

Я знаю коммит, где были включены ошибки.

Могу ли я использовать хэш sha1 родительского коммита для восстановления состояния каталога, как это было до того, как были включены ошибки?

Я подумал о чем-то вроде этого:

git checkout 348ce0aa02d3738e55ac9085080028b548e3d8d3 path/to/the/folder/

но это не сработало.

Ответ 1

попробуйте добавить '-' между версиями и путями:

git checkout 348ce0aa02d3738e55ac9085080028b548e3d8d3 -- path/to/the/folder/ 

Ответ 2

Есть два простых способа сделать это:

Если коммит, включенный в ошибки, включал только ошибки, используйте git revert, чтобы инвертировать его эффекты.

Если нет, то простой путь:

  • git checkout 348…
  • cp -a path/to/the/folder ../tmp-restore-folder
  • git checkout HEAD # or whatever
  • rm -rf path/to/the/folder
  • mv ../tmp-restore-folder path/to/the/folder
  • git add path/to/the/folder
  • git commit -m "revert …"

Ответ 3

Если вы просто сделаете git checkout <SHA-ID>, то он временно переместит вас в этот sha-commit.

Каждый объект фиксации удерживает всю структуру диска в это время, поэтому, если у вас есть файлы и их нужно скопировать, вы можете сделать это. Предупреждение, однако, вы не будете в любом филиале, поэтому вам нужно будет вернуться к мастеру, прежде чем копировать файл в свое рабочее дерево и зафиксировать его.