Может ли команда "git rm -r -f <directory>" быть отменена? - PullRequest
5 голосов
/ 31 января 2012

Я настраивал свой первый git-репозиторий и выполнил следующее:

git init

, а затем некоторые настройки git-config для настройки удаленного сервера.Затем я сделал

git add directory
git status

Упс, я добавил некоторые файлы, которые я не хотел.Итак, я должен выполнить команду git rm, чтобы удалить каталог из списка коммитов и начать заново

git rm directory

На этом этапе я должен был прочитать сообщение консоли и документацию должным образом .... но не сделал этого.Итак, я побежал

git rm directory -r -f

А?Куда ушел мой каталог?Ах, ладно, мерзавец удалил его, так что его больше нет.Итак, давайте попробуем,

git status
git reset --hard

После безуспешных попыток, некоторых сообщений об ошибках и нескольких поисковых запросов в Интернете, я понял, что это ошибка.Я должен был использовать

git rm -r --cached directory

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

Кажется, должен быть способ восстановиться после этого, но большинство моих поисков заканчиваются указанием на опцию "--cached" ... и уже немного позднотот.Коммитов нет, поэтому я не могу просто вернуть / вытащить файлы (была только локальная копия).

Можно ли вернуть эти файлы обратно?

Ответы [ 2 ]

6 голосов
/ 31 января 2012

Нет коммитов, поэтому я не могу просто вернуть / вытащить файлы (была только локальная копия)

и

Можно ли вернуть эти файлы обратно?

Ответ нет .

Нет коммитов, следовательно, вы не используете контроль версий.

Файлы никогда не поступали в базу данных объектов. В общем, вы никогда не сможете вернуть ненужные вещи в git. Чаще всего вы можете вернуть ранее совершенные вещи обратно.

Эмпирическое правило: совершайте часто

Редактировать

Смотри также

Я сегодня тоже случайно запустил git reset --hard в своем репо, хотя сегодня у меня были незафиксированные изменения. Чтобы получить его обратно, я запустил git fsck --lost-found, который записал все не имеющие ссылки капли в <path to repo>/.git/lost-found/. Поскольку файлы не были переданы, я нашел их в каталоге other внутри <path to repo>/.git/lost-found/. Оттуда я могу видеть незафиксированные файлы, копировать BLOB-объекты и переименовывать их.

Примечание: это работает только , если вы добавили файлы, которые хотите сохранить, в индекс (используя git add .). Если файлы не были в индексе, они будут потеряны.

2 голосов
/ 01 января 2013

Я сделал точно такую ​​же ошибку, но, несмотря на добавление файлов в индекс git ранее, я не смог восстановить их, используя 'git fsck --lost-found'. К счастью, я запомнил опцию отслеживания «Локальная история» в моей IDE, поэтому, используя ее, без проблем я восстановил весь код, кроме двоичных файлов библиотеки:)

...