Как отменить последний коммит в Git?

«Как отменить последний коммит в Git?» — вопрос из категории Git, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Есть несколько способов, выбор зависит от того, был ли коммит уже отправлен в удалённый репозиторий.

1. Отмена локального коммита (ещё не отправлен в origin)

  • git reset --soft HEAD~1 — отменяет коммит, но оставляет все изменения в индексе (staged). Позволяет сразу сделать новый коммит.
  • git reset --mixed HEAD~1 (опция по умолчанию) — отменяет коммит, оставляет изменения в рабочей директории, но не в индексе. Нужно будет снова добавить файлы через git add.
  • git reset --hard HEAD~1 — полностью удаляет коммит и все связанные с ним изменения в рабочей директории. Использовать с осторожностью.

2. Отмена уже отправленного коммита (push) Лучше создать новый коммит, отменяющий изменения, чтобы не переписывать историю, с которой работают другие.

  • git revert HEAD — создаёт новый коммит, который инвертирует изменения последнего коммита. Это безопасный способ для публичной ветки.
  • git push origin <branch_name> — затем отправляем этот новый коммит-отмену.

Пример безопасной отмены отправленного коммита:

# Создаём коммит, отменяющий изменения последнего коммита
git revert HEAD
# Вводим сообщение для коммита revert и сохраняем
# Отправляем изменения в удалённый репозиторий
git push origin main