Git: отменить последний коммит
Последнее обновление
Чтобы отменить самый последний коммит, решите, что должно произойти с его изменениями. Оставьте их в индексе с помощью git reset --soft HEAD~1, оставьте вне индекса простым git reset HEAD~1 или отбросьте их с помощью git reset --hard HEAD~1. Если коммит лишь немного неверен, git commit --amend исправит его на месте. Если он уже запушен, используйте git revert вместо переписывания истории. Чтобы отменить более старый коммит или несколько коммитов сразу, смотрите страницу «git отменить коммит».
Попробуйте это в терминальном playground - настоящая оболочка в вашем браузере, ничего не нужно устанавливать.
Выберите, что делать с изменениями
| Goal | Command |
|---|---|
| Отменить коммит, оставить изменения в индексе | git reset --soft HEAD~1 |
| Отменить коммит, оставить изменения вне индекса | git reset HEAD~1 |
| Отменить коммит, отбросить изменения | git reset --hard HEAD~1 |
| Исправить последний коммит (сообщение или файлы) | git commit --amend |
| Отменить уже запушенный коммит | git revert HEAD |
Разобранный пример
Отмените последний коммит и закоммитьте его заново с более понятным сообщением.
| Step | Command | Result |
|---|---|---|
| 1 | git reset --soft HEAD~1 | Коммит удалён, изменения остаются в индексе |
| 2 | git commit -m "clearer message" | Закоммитить те же изменения заново |
Частые вопросы об отмене последнего коммита в Git
Как отменить последний коммит, но сохранить изменения?
git reset --soft HEAD~1. Это удаляет последний коммит, но оставляет его изменения в индексе, так что вы можете сразу закоммитить их заново. Чтобы изменения оказались вне индекса в вашем рабочем дереве, используйте git reset HEAD~1 (режим по умолчанию).Как отменить последний коммит и удалить изменения?
git reset --hard HEAD~1. Это удаляет коммит и отбрасывает его изменения из вашего рабочего дерева. Это разрушительно: если работа может понадобиться, используйте вместо этого --soft или восстановите её позже через git reflog.А если мне нужно только исправить сообщение коммита?
git commit --amend. Он снова открывает последний коммит, чтобы вы могли отредактировать его сообщение (и при необходимости заново проиндексировать файлы) без создания отдельного коммита. Избегайте amend для уже запушенного коммита, так как это переписывает историю.Как отменить последний коммит после того, как я его запушил?
git revert HEAD. Revert создаёт новый коммит, который отменяет предыдущий, оставляя историю нетронутой - безопасный выбор для общих веток. Reset запушенного коммита заставит всех остальных согласовывать переписанную ветку.