Как отменить последний коммит git
4 года назад
Andrey Moshkov
Ответы
Тут нужно понять, что именно необходимо сделать. Потому что под отменой часто понимают удаление последнего коммита. Удалить последний коммит можно очень просто с помощью команды git reset. Причём можно как сохранить изменения в рабочей директории, так и полностью удалить все изменения сделанные в последнем коммите.
А вот отменить изменения сделанные в последнем коммите можно с помощью команды git revert. Она делает еще один коммит, но с противоположными изменениями.
4 года назад
Roman Ashikov
Обратите внимание, что команда git reset может быть опасна, поскольку она изменяет историю репозитория. Поэтому важно следить за тем, что вы делаете, и убедиться, что вы работаете над локальным репозиторием, а не с удаленным репозиторием, так как при изменении истории удаленного репозитория у других участников могут возникнуть проблемы с синхронизацией своих локальных репозиториев.
4 года назад
Сергей Мишин
Как отменить последний коммит в Git
Сначала определитесь, что именно нужно сделать. Ответ зависит от того, отправили вы коммит в удалённый репозиторий или нет.
Коммит ещё не отправлен (только локально)
Хочу убрать коммит, но оставить изменения в файлах
Коммит исчезнет, файлы останутся изменёнными. Можно исправить и закоммитить снова.
Хочу убрать коммит и вернуть файлы к предыдущему состоянию
Файлы будут перезаписаны. Восстановить их после этого сложно — будьте внимательны.
Хочу исправить коммит, а не удалять
Если просто забыли добавить файл или опечатались в сообщении:
--amend заменяет последний коммит новым. История не удлиняется.
Коммит уже отправлен в удалённый репозиторий
git reset в этом случае опасен: вы переписываете историю,
и у остальных участников команды возникнут конфликты.
Правильный способ — создать новый коммит, который отменяет изменения:
Git создаст новый коммит с противоположными изменениями и откроет редактор для сообщения. Чтобы не открывал — добавьте флаг:
После этого отправляйте в обычном режиме:
Сравнение подходов
Главное правило
Если коммит уже в удалённом репозитории — используйте только git revert.
git reset в этом случае сломает историю у всех, кто уже получил этот коммит.
6 месяцев назад
Никита Вихров
Если коммит ещё не отправлен на сервер, отмените его командой git reset --soft HEAD~1. Коммит исчезнет, а изменения останутся в файлах и в индексе: их можно поправить и закоммитить заново.
Если коммит уже отправлен в общий репозиторий, используйте git revert HEAD: Git создаст новый коммит, который отменяет изменения последнего.
Какую команду выбрать
HEAD~1 — коммит перед последним. Отменить три последних коммита: HEAD~3.
Исправить последний коммит
Забыли добавить файл или опечатались в сообщении:
Чтобы оставить старое сообщение: git commit --amend --no-edit.
Коммит уже отправлен
В общей ветке историю не переписывают: у коллег уже есть ваш коммит. Создайте отменяющий коммит и отправьте его:
Если ветка ваша и её никто не забирал, можно переписать историю и отправить с принудительной заменой:
--force-with-lease откажется перезаписывать ветку, если в ней появились чужие коммиты.
В коммит попал лишний файл
Например, .env с паролями. Уберите файл из репозитория, но оставьте на диске:
Файл останется в истории предыдущих коммитов. Если в нём были пароли или ключи, считайте их утёкшими и замените. Удалить файл из всей истории можно утилитой git filter-repo.
Если отменили лишнее
git reflog хранит историю перемещений HEAD, в том числе после reset --hard:
Работу с историей и отмену изменений разбирают в бесплатном курсе «Основы Git».
25 дней назад
Никита Вихров






