Menu
Coddy logo textTech

Git: Отмена коммита

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

То, как отменить коммит, зависит от того, какой это коммит и был ли он запушен. Для старого коммита в глубине истории - или чего-то уже опубликованного - нужен git revert, который добавляет новый коммит, обращающий изменения, ничего не переписывая. Несколько последних локальных коммитов можно просто убрать с помощью git reset. А если нужно отменить только самый последний коммит, страница «git отменить последний коммит» разбирает все варианты этого быстрого исправления.

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

Какую команду использовать

SituationCommand
Отменить один старый коммит, сохранив всё, что после негоgit revert <hash>
Отменить уже запушенный коммитgit revert <hash>
Отменить последние 3 локальных коммита, сохранив работуgit reset --soft HEAD~3
Отменить последние 3 локальных коммита, отбросив работуgit reset --hard HEAD~3
Отменить диапазон новыми обратными коммитамиgit revert HEAD~3..HEAD

reset vs revert

Behaviorgit resetgit revert
Переписывает историюДаНет
Безопасно для запушенных коммитовНетДа
Создаёт новый коммитНетДа
Работает со старыми коммитами в середине историиНетДа
Может отбросить измененияДа (--hard)Нет

Разобранный пример

Отмените конкретный старый коммит - даже уже запушенный - не трогая коммиты, которые идут после него.

StepCommandResult
1git log --onelineНайдите хеш плохого коммита (например, a1b2c3d)
2git revert a1b2c3dНовый коммит обращает его; последующие коммиты не тронуты
3git pushПоделитесь исправлением - история не переписывалась

FAQ по отмене коммита в Git

Как отменить старый коммит, не потеряв коммиты после него?
Используйте git revert <hash>. Revert создаёт новый коммит, который обращает только тот коммит, что вы указали - все коммиты после него остаются ровно такими, какими были. Сначала найдите хеш с помощью git log --oneline. Если revert конфликтует с более поздними изменениями, Git останавливается, чтобы вы могли разрешить конфликт и выполнить git revert --continue.
Как отменить несколько коммитов сразу?
Для коммитов, которые есть только локально, git reset --soft HEAD~3 убирает последние три, оставляя их изменения в индексе (используйте --hard, чтобы их отбросить). Для запушенных коммитов вместо этого ревертните диапазон: git revert --no-commit HEAD~3..HEAD обращает все три, а затем один git commit фиксирует отмену.
Как отменить коммит, который я уже запушил?
Используйте git revert <hash> вместо reset. Revert создаёт новый коммит, отменяющий изменения целевого коммита, оставляя историю нетронутой. Это безопасный способ отмены общих коммитов - переписывание запушенной истории с помощью reset заставляет всех остальных согласовывать свои копии.
Когда использовать reset, а когда revert?
Reset - когда коммиты только ваши и ещё локальные: он просто перемещает ветку назад, как будто их и не было. Revert - когда коммит запушен, общий или находится в середине истории: он отменяет изменения новым коммитом, который безопасно получить всем.
Можно ли попрактиковаться в этом онлайн?
Да. Откройте терминальный playground, чтобы выполнить эти команды в настоящем shell в вашем браузере - ничего устанавливать не нужно. Бесплатный интерактивный курс по Git от Coddy также пошагово рассматривает отмену изменений.
Coddy programming languages illustration

Изучайте Git с Coddy

НАЧАТЬ