git revert: отменить коммит новым коммитом
Обновлено 31 июля 2026 г.
git revert создаёт новый коммит, который отменяет изменения указанного, при этом сам отменяемый коммит остаётся в истории на своём месте. Так откатывают работу, которая уже ушла на сервер: история не переписана, и у тех, кто успел забрать ветку, ничего не разъедется.
$ git revert 0da918c
[main 375d973] Revert "поправил опечатки"
1 file changed, 1 deletion(-)
$ git log --oneline
375d973 Revert "поправил опечатки"
0da918c поправил опечатки
435eda7 добавил раздел про наймВ истории теперь оба коммита: тот, что напортил, и тот, что откатил. Перед созданием коммита git открывает редактор с готовым сообщением Revert "..." - достаточно сохранить и закрыть. Флаг --no-edit пропускает этот шаг.
Разница с git reset в направлении движения. Reset двигает указатель ветки назад, и коммиты выпадают из истории. Revert добавляет коммит вперёд и историю не трогает. Работа только у тебя на машине - можно reset. Работа на сервере - только revert.
Отменить можно несколько коммитов сразу или целое слияние:
$ git revert HEAD~3..HEAD # три последних коммита, от новых к старым
$ git revert -m 1 9af7538 # отменить слияние, вернувшись к ветке-приёмникуУ коммита слияния два родителя, и git не знает, какое из двух состояний считать «до». Без указания родителя он отказывается работать:
$ git revert 9af7538
error: commit 9af7538c1e0b4a2d6f83b5c07e19d4a3f2b86c15 is a merge but no -m option was given.
fatal: revert failed-m 1 называет первого родителя - ту ветку, в которую вливали. Именно её состояние и вернётся.
Частые ошибки
Отменённое слияние оставляет след. Git по-прежнему считает влитые коммиты применёнными, поэтому повторное слияние той же ветки не вернёт их обратно. Чтобы вернуть, отменяют сам коммит отмены: git revert <хеш>, где хеш - это тот самый Revert "Merge branch ...".
Второе: revert отменяет конкретные коммиты, а не «возвращает проект к состоянию на прошлой неделе». Для нескольких коммитов пиши диапазон, и учти порядок: git применяет отмены от новых к старым, иначе они не легли бы одна на другую.
Где это в учебнике
Выбор между revert и reset разобран в восьмой главе, слияние веток - в пятой.
Глава 8. Аптечка: когда что-то пошло не так
Потренироваться руками - в Песочнице: настоящий терминал с git и проверка шагов.