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