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