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

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

A-B-C
    ↑
  master

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

2 ответов


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

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

git checkout -f

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

удаленные файлы снова.

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


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