← Назад к вопросам
Как отменить не последний commit?
1.0 Junior🔥 101 комментариев
#Soft Skills и рабочие процессы
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI3 апр. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Отмена не последнего commit в Git
Иногда нужно отменить изменения из commit'а, который находится не в конце истории. Есть несколько подходов в зависимости от того, был ли commit уже запушен и нужно ли сохранить историю.
1. git revert - самый безопасный способ
Создаёт новый commit, который отменяет изменения целевого commit'а:
# Посмотри историю
git log --oneline
# output:
# abc1234 Latest commit
# def5678 Commit to revert
# ghi9012 Another commit
# Отмени конкретный commit
git revert def5678
# Git откроет редактор для сообщения нового commit'а
# По умолчанию: Revert 'Commit message'
# Если хочешь пропустить редактор
git revert def5678 --no-edit
2. git reset - пересоздание истории
Перемещает HEAD на нужный commit, все изменения после него становятся неиндексированными:
# Мягкий reset (soft) - сохраняет изменения в staging
git reset --soft abc1234
# Смешанный reset (mixed) - по умолчанию
git reset --mixed abc1234
# Жёсткий reset (hard) - ОСТОРОЖНО!
git reset --hard abc1234
3. git rebase интерактивный
Позволяет удалить commit из середины истории:
# Откроет интерактивный редактор
git rebase -i abc1234^
# В редакторе замени 'pick' на 'drop' для удаления commit'а
# drop def5678 Commit to delete
# Сохрани и закрой редактор
4. Если commit уже запушен на shared ветку
Тогда ТОЛЬКО git revert:
# Найди commit hash
git log --oneline
# Отмени его
git revert def5678
# Запши
git push origin main
5. Восстановление после ошибки
Если случайно удалил что-то:
# Git сохраняет всё в reflog на 30 дней
git reflog
# Восстанови нужный state
git reset --hard abc1234
Рекомендации
- На личной ветке используй git reset или rebase -i
- На shared ветке (main, develop) используй ТОЛЬКО git revert
- Всегда проверь что удаляешь с git log --oneline
- Никогда не используй reset --hard на shared ветке
- Если сомневаешься используй git revert, это всегда безопасно
Сравнение методов
git revert - безопаснее, сохраняет историю, можно использовать на shared веткахgit reset - быстрее, но только на личных веткахgit rebase -i - мощный инструмент для редактирования истории
Практический пример
Если у тебя история:
- commit 5: Fix bug (current HEAD)
- commit 4: Add feature
- commit 3: Bad commit (нужно удалить)
- commit 2: Initial
Для отмены commit 3:
# Способ 1: revert (безопасно, работает везде)
git revert --no-edit 3
# Способ 2: reset (если не запушен)
git reset --soft 2
# Способ 3: rebase (если не запушен)
git rebase -i 2^