Как отменить последний коммит?
Продвинутые темы
Последний коммит отменяют: `git reset` (убрать коммит, с сохранением или потерей изменений) или `git revert HEAD` (обратный коммит, безопасно для общих веток).
git reset (локально, до push)
--soft — убрать коммит, оставить изменения в индексе
git reset --soft HEAD~1 # коммит отменён, изменения stagedДля переделки коммита.
--mixed (по умолчанию) — убрать коммит и индекс, оставить файлы
git reset HEAD~1 # изменения в рабочей директории (не staged)--hard — убрать коммит И изменения (осторожно!)
git reset --hard HEAD~1 # изменения ПОТЕРЯНЫПолностью удаляет последний коммит и его изменения.
git revert (безопасно, для запушенных)
Создаёт новый коммит, отменяющий последний:
git revert HEAD- История сохраняется — безопасно для общих/запушенных веток.
git commit --amend (изменить, не отменить)
Переделать последний коммит (сообщение/содержимое):
git commit --amendКак выбирать
- Не запушен, переделать →
git reset --soft/--mixed. - Не запушен, выбросить полностью →
git reset --hard(осторожно). - Запушен в общую ветку →
git revert HEAD(безопасно). - Изменить сообщение/содержимое →
git commit --amend.
После reset запушенного
Если коммит был запушен, reset требует git push --force-with-lease (только на своих ветках).
Коротко для собеседования
Последний коммит отменяют: git reset --soft HEAD~1 (убрать коммит, изменения в staging), --mixed (в рабочей директории), --hard (удалить с изменениями — осторожно) — до push. Для запушенного в общую ветку — git revert HEAD (обратный коммит, безопасно). Изменить, а не отменить — git commit --amend. Reset запушенного требует --force-with-lease.