Revert: Безопасная отмена коммитов¶
git revert — это безопасный способ отмены изменений, внесенных предыдущим коммитом. В отличие от reset, он не удаляет историю, а создает новый коммит с обратными изменениями.
Зачем использовать Revert?¶
- Безопасность: История остается нетронутой, что критично для общих веток.
- Отслеживаемость: Видно, какой коммит был отменен и кем.
- Командная работа: Не ломает локальные копии у коллег.
Базовое использование¶
Отмена последнего коммита¶
git revert HEAD
Git создаст новый коммит, который отменяет изменения последнего коммита. Откроется редактор для подтверждения сообщения коммита.
Чтобы сразу сделать коммит без открытия редактора:
git revert HEAD --no-edit
Отмена конкретного коммита по хешу¶
git revert <хеш-коммита>
Пример:
git revert a1b2c3d
Отмена нескольких коммитов¶
Можно указать диапазон (но помните, что порядок важен):
git revert HEAD~2..HEAD
Отменит последние три коммита (от HEAD~2 до HEAD включительно).
Или перечислить конкретные хеши:
git revert a1b2c3d e4f5g6h
Отмена слияния (Merge Commit)¶
Если нужно отменить коммит слияния, используйте флаг -m (mainline), чтобы указать, какую ветку считать основной:
git revert -m 1 <хеш-коммита-слияния>
-m 1: означает, что мы хотим вернуться к состоянию первой ветки (обычно той, в которую делали merge).-m 2: вернет ко второй ветке.
Прерывание Revert¶
Если при revert возникли конфликты и вы хотите отменить процесс:
git revert --abort
Сравнение Revert и Reset¶
| Характеристика | Revert | Reset |
|---|---|---|
| Изменяет историю | ❌ Нет (создает новый коммит) | ✅ Да (удаляет коммиты) |
| Безопасно для общих веток | ✅ Да | ❌ Нет (кроме soft) |
| Что делает | Создает коммит с обратными изменениями | Перемещает указатель ветки назад |
| Когда использовать | Для отмены уже отправленных коммитов | Для отмены локальных коммитов до push |
Типичный сценарий¶
- Вы запушили коммит с ошибкой в
main. - Коллеги уже скачали изменения.
- Нельзя использовать
reset— это сломает их репозитории. - Нужно использовать
revert:
git pull origin main
git revert <хеш-ошибочного-коммита>
git push origin main
Теперь в истории будет видно: "Добавить фичу" → "Отменить добавление фичи". История чиста и понятна.