Ответ
В работе я использую две основные команды, в зависимости от того, нужно ли сохранить историю изменений для коллег.
1. git revert — безопасный откат с сохранением истории
Эту команду я применяю, когда коммит уже отправлен в общий репозиторий (например, в main). Она создает новый коммит, который инвертирует изменения указанного.
# Откатить последний коммит
git revert HEAD
# Откатить конкретный коммит по его хешу
git revert a1b2c3d
После этого нужно сделать git push. Это предпочтительный способ для исправления ошибок в продакшене, так как история не перезаписывается и все видят, что изменение было отменено.
2. git reset — перезапись локальной истории
Использую только в локальной ветке, чтобы исправить еще не опубликованные коммиты. Опасно: удаляет коммиты из истории.
# Откатить последний коммит, оставив изменения в рабочей директории (unstaged)
git reset HEAD~1
# Или git reset --mixed HEAD~1 (то же самое по умолчанию)
# Откатить последний коммит, оставив изменения проиндексированными (staged)
git reset --soft HEAD~1
# Полный откат — удалить коммит И все изменения в файлах (использовать с крайней осторожностью!)
git reset --hard HEAD~1
После --soft или --mixed можно сразу сделать новый, исправленный коммит. --hard безвозвратно стирает изменения.