PassFront
  1. PassFront
  2. База знаний
  3. Продвинутые темы

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

Продвинутые темы

Последний коммит отменяют: `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.

Другие вопросы раздела