Перейти к содержанию

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

Типичный сценарий

  1. Вы запушили коммит с ошибкой в main.
  2. Коллеги уже скачали изменения.
  3. Нельзя использовать reset — это сломает их репозитории.
  4. Нужно использовать revert:
git pull origin main
git revert <хеш-ошибочного-коммита>
git push origin main

Теперь в истории будет видно: "Добавить фичу" → "Отменить добавление фичи". История чиста и понятна.


Назад: Reset и Restore → | Далее: Stash →