← Назад к вопросам

Как отменить не последний 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^
Как отменить не последний commit? | PrepBro