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

Обновлено 31 июля 2026 г.

«Отменить коммит» - это четыре разные операции, и выбор между ними решают два вопроса: ушёл ли коммит на сервер и что должно стать с его изменениями. Ответь на них, и команда определится сама.

  • Надо только поправить сообщение или добавить забытый файл, коммит ещё локальный -> git commit --amend.
  • Снять коммит, а его изменения оставить в индексе готовыми к новому коммиту, локально -> git reset --soft HEAD~1.
  • Снять коммит вместе с изменениями, локально -> git reset --hard HEAD~1. Единственный вариант, где работа теряется.
  • Коммит уже на сервере и его могли забрать -> git revert <хеш>. Новый коммит отменяет старый, историю не трогает.

Забыл файл в последнем коммите - добавь его и повтори коммит с тем же сообщением:

$ git add images.txt
$ git commit --amend --no-edit
[main 02990aa] глава про сроки
 Date: Tue Mar 17 12:04:31 2026 +0300
 2 files changed, 2 insertions(+)
 create mode 100644 chapter.txt
 create mode 100644 images.txt

Коммит оказался лишним, но его правки ещё нужны - передвинь указатель ветки на шаг назад, оставив изменения в индексе:

$ git reset --soft HEAD~1
$ git status --short
M  report.txt

С --hard вместо --soft уходит и коммит, и правки на диске; это единственная команда здесь, после которой работу можно потерять насовсем. А если коммит уже отправлен, историю не переписывают, её дополняют встречным коммитом:

$ git revert 0da918c
[main 375d973] Revert "поправил опечатки"
 1 file changed, 1 deletion(-)

Правило одно и запоминается легко. Пока коммит живёт только на твоей машине - правь его на месте через --amend или снимай через reset, никто не заметит. Как только он ушёл на сервер и попал к другим - только revert: он не трогает то, что люди уже забрали.

Частые ошибки

HEAD~1 значит «на один коммит назад», а не «последний коммит». git reset --hard HEAD (без ~1) историю не двигает вовсе, зато молча стирает все несохранённые правки в файлах. Сомневаешься, что уедет, - посмотри git status и git diff до, а не после.

revert на непушенном коммите тоже работает, но плодит лишнюю пару «сделал - отменил» в истории. Пока всё локально, чище снять коммит через reset, а revert беречь для того, что уже видели другие.

Где это в учебнике

Три режима reset и выбор между reset, amend и revert разобраны в главах про изменения и про аптечку.

Глава 4. Посмотреть, отменить, спрятать лишнее Глава 8. Аптечка: когда что-то пошло не так