2016-10-20 2 views
2

Я хотел бы восстановить целый каталог (рекурсивно) из истории моего репозитория git (точно так же, как this question).Команда git-only для восстановления каталога в состоянии фиксации

Я знаю, что команда сразу же мерзавец является:

git checkout [tree-ish] -- path/to/the/folder 

Но у меня есть проблема: восстановить существующий каталог в состоянии коммит, содержание директории должно быть удалено первым. В других случаях существующие файлы, которые не существовали в старой фиксации, не будут удалены. Таким образом, чтобы получить именно то, что я хочу, я должен сделать следующую команду:

rm -Rf path/to/the/folder 
git checkout [tree-ish] -- path/to/the/folder/ 

(см this answer и комментарии).

Я хотел бы знать, если есть ГИТ-единственная команда для достижения того же поведение двух команд выше, для того, чтобы избежать делает rm вручную.

EDIT: Я не хочу удалять неиспользуемые файлы или чистить после оформления заказа, у меня их нет. Я хочу восстановить папку точно так же, как это было какое-то обязательство, удаление добавленных файлов, восстановление удаленных файлов и т. Д.

+2

После 'git checkout' вы можете сделать' 'git clean -xdf'. – Leon

+0

Возможный дубликат [Как удалить локальные (не проверенные) файлы из текущей ветки Git?] (Http://stackoverflow.com/questions/61212/how-to-remove-local-untracked-files-from-the-current -git-branch) –

+0

Нет, я не делаю rm для удаления неиспользуемого файла в моем репо, я должен сделать это перед проверкой, чтобы иметь «реальный» checkout: я хотел бы восстановить мою папку в точно состояние какой-то битвы назад. Если я не удалю свою папку перед командой checkout, я буду в гибридной ситуации, в которой существующие файлы, которые не существовали в старой фиксации, все еще находятся в папке – Rowandish

ответ

1

Если вы только хотите, чтобы избежать вручную удалить файлы, то вы можете создать-имя-команды мерзавца файл

#!/bin/bash 
# main, path as argument... 
rm -Rf path/to/the/folder 
git checkout [tree-ish] -- path/to/t 

Поместить его в пользовательский/бункер и мерзавец будет признанным как команды мерзавца, что вам можно позвонить с

команде имя

мерзавца [путь/к// папки]

+0

Я не мог принять его, потому что это не родная команда git framework, а +1 точно! – Rowandish

Смежные вопросы