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

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

A-B-C
    ↑
  master

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

Ответ 1

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

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

git checkout -f

ПРЕДУПРЕЖДЕНИЕ: завершите незафиксированные файлы перед выполнением этой команды, иначе вы потеряете их все

Удаленные файлы должны быть снова возвращены.

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

Ответ 2

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