Я пытаюсь использовать git checkout <hash> <directory>
для проверки предыдущей версии каталога в моем репо.Это работает для восстановления файлов в каталоге до их прежнего состояния, единственная проблема заключается в том, что подкаталоги, которые были добавлены после извлеченной мной ревизии, не исчезают.
Например, если моя структура каталогов была следующей:
HEAD:
thing/dir1/
thing/dir2/
HEAD^:
thing/dir1/
Если я сделаю git checkout <hash>
, то я перехожу в режим отсоединенного HEAD, и все отлично подходит.Если вместо этого я сделаю git checkout <hash> thing/
, содержимое thing/dir1/
вернется, но thing/dir2/
останется на месте.
Запуск git status
показывает изменения файла с thing/dir1/
, но не упоминает thing/dir2/
.Это странно, потому что в контексте HEAD ^, thing/dir2/
не должно существовать и поэтому должно исчезнуть.git clean
не помогает, потому что он даже не отображается как неотслеживаемый.
Есть ли способ извлечь предыдущую версию каталога, которая полностью совпадает, без необходимости извлекать все рабочее дерево?
ОБНОВЛЕНИЕ:
Похоже, это будет работать:
git reset <hash> thing/
git checkout <hash> thing/
git clean -fd thing/
Это оставляет мое рабочее дерево и индекс в странном состоянии, но имеет желаемоеэффект.