Menu
Coddy logo textTech

Git Revert

Последнее обновление

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

Попробуйте эти команды в терминальном playground - настоящая оболочка в вашем браузере, ничего не нужно устанавливать.

git revert оставляет плохой коммит на месте и добавляет новый, применяющий обратные изменения, - история не переписывается.

Синтаксис

CommandWhat it does
git revert HEADОтменяет самый свежий коммит
git revert <hash>Отменяет конкретный коммит по хэшу
git revert HEAD~2..HEADОтменяет диапазон коммитов
git revert -n <hash>Отменяет, но пока не коммитит (только индексирует)
git revert -m 1 <merge-hash>Отменяет merge-коммит, сохраняя родителя 1

Во время revert

Если revert наталкивается на конфликт, разрешите его и продолжите.

CommandWhat it does
git revert --continueПродолжает после разрешения конфликтов
git revert --abortОтменяет выполняемый revert
git revert --skipПропускает текущий коммит и продолжает

revert vs reset

Behaviorgit revertgit reset
Переписывает историюНетДа
Безопасен для отправленных коммитовДаНет
Создаёт новый коммитДаНет
Отменяет коммит в серединеДаНеудобно

Частые вопросы о git revert

В чём разница между git revert и git reset?
git revert добавляет новый коммит, который отменяет изменения более раннего, оставляя историю нетронутой - безопасно для коммитов, которые вы уже отправили. git reset сдвигает указатель вашей ветки назад и переписывает историю; это нормально для локальных коммитов, но опасно на общих ветках. Используйте revert для отмены публичных коммитов, а reset - для локальных.
Как отменить коммит, который уже был отправлен?
Выполните git revert <hash> (или git revert HEAD для последнего), затем отправьте новый коммит revert. Поскольку revert не переписывает историю, это правильный способ отменить общий коммит - без force-push и без проблем для коллег, которые его уже забрали.
Как отменить merge-коммит?
У merge-коммита два родителя, поэтому Git должен знать, какую линию истории сохранить. Используйте git revert -m 1 <merge-hash>, где -m 1 указывает Git сохранить первого родителя (обычно ветку, в которую вы делали слияние). Отмена merge отменяет слитые изменения, но сохраняет сам merge в истории.
Можно ли отменить несколько коммитов сразу?
Да. Передайте диапазон вроде git revert HEAD~2..HEAD, чтобы отменить два последних коммита, или перечислите несколько хэшей. По умолчанию Git создаёт по одному коммиту revert на каждый отменённый коммит; добавьте -n, чтобы проиндексировать все отмены без коммита, а затем сделайте один коммит самостоятельно.
Можно ли попрактиковаться в этом онлайн?
Да. Откройте терминальный playground, чтобы выполнить git revert в настоящей оболочке в вашем браузере - ничего не нужно устанавливать. Бесплатный интерактивный курс по Git от Coddy также пошагово рассматривает отмену изменений.
Coddy programming languages illustration

Изучайте Git с Coddy

НАЧАТЬ