Как восстановить весь каталог из истории git-репозитория? - PullRequest
80 голосов
/ 12 марта 2012

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

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

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

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

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

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

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

Ответы [ 3 ]

135 голосов
/ 12 марта 2012

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

git checkout 348ce0aa02d3738e55ac9085080028b548e3d8d3 -- path/to/the/folder/ 
2 голосов
/ 12 марта 2012

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

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

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

  1. git checkout 348…
  2. cp -a path/to/the/folder ../tmp-restore-folder
  3. git checkout HEAD # or whatever
  4. rm -rf path/to/the/folder
  5. mv ../tmp-restore-folder path/to/the/folder
  6. git add path/to/the/folder
  7. git commit -m "revert …"
1 голос
/ 12 марта 2012

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...