Восстановление удаленного коммита с помощью git reflog
Что делать, если вы случайно удалили коммит? Git ведет запись всех изменений указателя HEAD в специальном журнале, называемом reflog. Это ваша страховка. Вы можете использовать его для поиска и восстановления потерянных коммитов.
Просмотрим reflog, чтобы найти историю, которую мы только что переписали.
git reflog
Вы увидите список выполненных вами действий. Найдите строку, которая гласит rebase (finish): returning to refs/heads/master. Запись непосредственно под ней, скорее всего, HEAD@{1}, представляет состояние вашей ветки до rebase.
a5b4c3d (HEAD -> master) HEAD@{0}: rebase (finish): returning to refs/heads/master
1e2d3f4 HEAD@{1}: rebase (start): checkout HEAD~3
...
Мы можем восстановить нашу ветку до этого предыдущего состояния с помощью git reset --hard. Эта команда является разрушительной и отбросит любые несохраненные изменения, поэтому используйте ее осторожно.
Сбросим нашу ветку до состояния перед rebase, которое в данном случае является HEAD@{1}.
git reset --hard HEAD@{1}
Вы увидите сообщение, подтверждающее, что HEAD теперь находится в состоянии до начала rebase.
HEAD is now at 1e2d3f4 Revert "feat: Add file2.txt"
Теперь в последний раз проверьте лог:
git log --oneline --graph
Вы должны увидеть историю такой, какой она была до rebase:
* f461400 (HEAD -> master) Revert "feat: Add file2.txt"
* acea45c chore: Add last-commit file again
* c04b3f5 docs: Update documentation in file1
* 9403080 feat: Add file2.txt
* ee39412 feat: Add file1.txt
Обратите внимание, что коммит "fix: Add a temporary file that should be removed" по-прежнему отсутствует — это правильно! Команда git reset --hard HEAD@{1} вернула нас в состояние до начала интерактивного rebase, а не до удаления коммита. Интерактивный rebase успешно удалил этот нежелательный коммит из нашей истории. Вы можете выполнить ls, чтобы убедиться, что bad-commit-file.txt по-прежнему отсутствует. reflog — это бесценный инструмент для восстановления после ошибок в Git.