PassFront
  1. PassFront
  2. База знаний
  3. Продвинутые темы

Как отменить не последний commit?

Продвинутые темы

Не последний коммит отменяют через интерактивный rebase (`git rebase -i`) — удаляют/меняют нужный коммит, или `git revert` (создаёт обратный коммит, безопасно для общих веток).

git revert (безопасно, для общих веток)

Создаёт новый коммит, отменяющий изменения указанного:

git revert <hash>   # обратный коммит для конкретного
  • История сохраняется (не переписывается) — безопасно для запушенных/общих веток.
  • Рекомендуется для main/develop.

git rebase -i (переписывает историю)

Интерактивно удалить/изменить коммит:

git rebase -i HEAD~3   # последние 3 коммита

В списке:

  • drop (или удалить строку) — убрать коммит.
  • edit — изменить.
  • squash — объединить.
pick   a1b2c3 нужный
drop   d4e5f6 отменяемый  ← удалить этот коммит
pick   g7h8i9 нужный
  • Переписывает историю → после нужен git push --force-with-lease (если запушено).
  • Только на своих feature-ветках.

Как выбирать

  • Общая/запушенная ветка → git revert (безопасно, без переписывания).
  • Локальная feature-ветка → git rebase -i (чистая история).

Осторожно

  • rebase на общих ветках ломает работу коллег.
  • Возможны конфликты при rebase (если коммиты зависят друг от друга).

Коротко для собеседования

Не последний коммит отменяют: git revert <hash> (создаёт обратный коммит, история сохраняется — безопасно для общих/запушенных веток) или git rebase -i HEAD~N с drop/edit (переписывает историю — нужен --force-with-lease, только на своих ветках). Для main/develop — revert, для локальных feature — interactive rebase.

Другие вопросы раздела