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 и проверка шагов.