Тур по Git
История и отмена изменений / Урок 3.6

git revert — Безопасная отмена коммитов

Команда git revert создаёт новый коммит, который отменяет изменения из предыдущего коммита. В отличие от git reset, она не переписывает историю — она дополняет её.

Revert vs Reset

git revertgit reset
ИсторияСохраняется (добавляется новый коммит)Переписывается (коммиты удаляются)
Общие веткиБезопасноОпасно
Способ отменыСоздаёт обратный коммитПеремещает HEAD назад

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

Как это работает

A — B — C — D        (до revert)
                ↓
A — B — C — D — D'   (после git revert D)

Коммит D' содержит точную противоположность изменений из D. Исходный коммит D остаётся в истории.

Основное использование

git revert HEAD          # Отменить последний коммит
git revert abc1234       # Отменить конкретный коммит по SHA
git revert HEAD~2        # Отменить коммит, который два коммита до HEAD

Git откроет ваш редактор для написания сообщения коммита. Сообщение по умолчанию описывает, какой коммит был отменён.

Попробуйте!

Попрактикуйтесь в отмене коммита:

  1. Создайте файл и закоммитьте его:
    • echo "hello" > greeting.txt && git add greeting.txt && git commit -m "Add greeting"
  2. Сделайте второй коммит:
    • echo "goodbye" >> greeting.txt && git add greeting.txt && git commit -m "Add farewell"
  3. Проверьте файл: cat greeting.txt — показывает обе строки
  4. Отмените второй коммит: git revert HEAD --no-edit
  5. Проверьте файл снова: cat greeting.txt — показывает только "hello"
  6. Проверьте лог: git log --oneline — видны все три коммита, включая revert

Отмена старых коммитов

Вы можете отменить любой коммит, не только последний. Git разберётся, какие изменения нужно отменить:

git log --oneline        # Найдите SHA коммита
git revert abc1234       # Отмените этот конкретный коммит

Если отмена вызывает конфликт (потому что более поздние коммиты зависят от отменяемых изменений), Git попросит вас разрешить его вручную.

Ключевые моменты

  • git revert безопасен для общих/публичных веток — он никогда не переписывает историю
  • Он создаёт новый коммит, отменяющий изменения целевого коммита
  • Исходный коммит остаётся в логе для отслеживаемости
  • Если возникают конфликты, разрешите их и выполните git revert --continue
🎯

Цель

Создайте коммиты, затем безопасно отмените один с помощью git revert

Terminal
$

No commits yet. Run `git init` and create your first commit.