Ответ 1
попробуйте добавить '-' между версиями и путями:
git checkout 348ce0aa02d3738e55ac9085080028b548e3d8d3 -- path/to/the/folder/
Я хотел бы восстановить целую директорию (рекурсивно) из истории моего репозитория git.
Существует только 1 ветвь (мастер).
Я знаю коммит, где были включены ошибки.
Могу ли я использовать хэш sha1 родительского коммита для восстановления состояния каталога, как это было до того, как были включены ошибки?
Я подумал о чем-то вроде этого:
git checkout 348ce0aa02d3738e55ac9085080028b548e3d8d3 path/to/the/folder/
но это не сработало.
попробуйте добавить '-' между версиями и путями:
git checkout 348ce0aa02d3738e55ac9085080028b548e3d8d3 -- path/to/the/folder/
Есть два простых способа сделать это:
Если коммит, включенный в ошибки, включал только ошибки, используйте 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 …"
Если вы просто сделаете git checkout <SHA-ID>
, то он временно переместит вас в этот sha-commit.
Каждый объект фиксации удерживает всю структуру диска в это время, поэтому, если у вас есть файлы и их нужно скопировать, вы можете сделать это. Предупреждение, однако, вы не будете в любом филиале, поэтому вам нужно будет вернуться к мастеру, прежде чем копировать файл в свое рабочее дерево и зафиксировать его.