Git Revert
Последнее обновление
git revert отменяет коммит, создавая новый коммит, который применяет обратные изменения. Поскольку он дополняет историю, а не переписывает её, revert - безопасный способ отменить уже отправленный коммит: в отличие от git reset, он не заставляет всех остальных согласовывать переписанную ветку.
Попробуйте эти команды в терминальном playground - настоящая оболочка в вашем браузере, ничего не нужно устанавливать.
Синтаксис
| Command | What 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 наталкивается на конфликт, разрешите его и продолжите.
| Command | What it does |
|---|---|
git revert --continue | Продолжает после разрешения конфликтов |
git revert --abort | Отменяет выполняемый revert |
git revert --skip | Пропускает текущий коммит и продолжает |
revert vs reset
| Behavior | git revert | git 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 также пошагово рассматривает отмену изменений.