Как отменить последний коммит
Обновлено 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. Аптечка: когда что-то пошло не так