Отменить удаление в GIT - PullRequest
       42

Отменить удаление в GIT

55 голосов
/ 28 февраля 2012

Я сделал что-то очень глупое. Я сделал коммит, используя git commit (редактирование файлов + новые файлы) (C). Затем я сделал поправку последнего коммита. Затем я удалил все файлы рекурсивно (!), Используя git rm -r Затем я сделал еще один git commit (C).

A-B-C
    ↑
  master

Есть ли способ восстановить файлы, но сохранить изменения, которые были у меня при первом коммите? (С) Я бы лучше не возвращался к (B). Я попытался выполнить git reset --soft head ^, поэтому в списке состояния git я удалил файлы, затем сделал git checkout, но все равно не повезло. Я даже не знаю, возможно ли это.

Ответы [ 2 ]

167 голосов
/ 28 февраля 2012

Сделайте себе одолжение и не делайте git checkout <hash>, как предлагает другой ответ, и перейдите к другим проблемам.

Если вы удалили файл из своего рабочего каталога и еще не зафиксировали изменения, сделайте:

git checkout -f

ВНИМАНИЕ: передайте незафиксированные файлы перед выполнением этой команды, в противном случае вы потеряете их все

Удаленные файлы должны вернуться снова.

Если нет, и если вы можете найти нужный коммит (C и т. Д. - ваш вопрос не ясен) из git reflog, просто наберите git reset --hard <hash from reflog>, и все должно быть в порядке.

6 голосов
/ 28 февраля 2012

Если я правильно вас понял, вы переписали коммит C. Итак, исходный коммит, назовем его C1, недоступен из вашего графика коммитов, но он все еще там (git некоторое время сохраняет все коммиты).Используйте git reflog для получения хэша коммита и git checkout <hash> или другую подходящую команду для перехода в старое состояние C1.

...