/
Вопросы и ответы
/
Git
/

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

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

4 года назад

Andrey Moshkov

Ответы

16

Тут нужно понять, что именно необходимо сделать. Потому что под отменой часто понимают удаление последнего коммита. Удалить последний коммит можно очень просто с помощью команды git reset. Причём можно как сохранить изменения в рабочей директории, так и полностью удалить все изменения сделанные в последнем коммите.

git reset HEAD~ # удаляем только коммит
git reset --hard HEAD~ # удаляем коммит и изменения

А вот отменить изменения сделанные в последнем коммите можно с помощью команды git revert. Она делает еще один коммит, но с противоположными изменениями.

git revert aa600a43cb164408e4ad87d216bc679d097f1a6c
# нужно передать ей хеш коммита, который мы отменяем

4 года назад

Roman Ashikov

7

Обратите внимание, что команда git reset может быть опасна, поскольку она изменяет историю репозитория. Поэтому важно следить за тем, что вы делаете, и убедиться, что вы работаете над локальным репозиторием, а не с удаленным репозиторием, так как при изменении истории удаленного репозитория у других участников могут возникнуть проблемы с синхронизацией своих локальных репозиториев.

3 года назад

Сергей Мишин

0

Как отменить последний коммит в Git

Сначала определитесь, что именно нужно сделать. Ответ зависит от того, отправили вы коммит в удалённый репозиторий или нет.

Коммит ещё не отправлен (только локально)

Хочу убрать коммит, но оставить изменения в файлах

git reset HEAD~

Коммит исчезнет, файлы останутся изменёнными. Можно исправить и закоммитить снова.

Хочу убрать коммит и вернуть файлы к предыдущему состоянию

git reset --hard HEAD~

Файлы будут перезаписаны. Восстановить их после этого сложно — будьте внимательны.

Хочу исправить коммит, а не удалять

Если просто забыли добавить файл или опечатались в сообщении:

git add забытый_файл.py
git commit --amend -m "Правильное сообщение коммита"

--amend заменяет последний коммит новым. История не удлиняется.

Коммит уже отправлен в удалённый репозиторий

git reset в этом случае опасен: вы переписываете историю, и у остальных участников команды возникнут конфликты.

Правильный способ — создать новый коммит, который отменяет изменения:

git revert HEAD

Git создаст новый коммит с противоположными изменениями и откроет редактор для сообщения. Чтобы не открывал — добавьте флаг:

git revert HEAD --no-edit

После этого отправляйте в обычном режиме:

git push

Сравнение подходов

СитуацияКомандаМеняет историю
Коммит локальный, хочу переделатьgit reset HEAD~Да
Коммит локальный, хочу всё стеретьgit reset --hard HEAD~Да
Только исправить сообщение / добавить файлgit commit --amendДа
Коммит уже в удалённом репозиторииgit revert HEADНет

Главное правило

Если коммит уже в удалённом репозитории — используйте только git revert. git reset в этом случае сломает историю у всех, кто уже получил этот коммит.

9 дней назад

Никита Вихров

+7 800 100 22 47

бесплатно по РФ

+7 495 085 21 62

бесплатно по Москве

108813 г. Москва, вн.тер.г. поселение Московский,
г. Московский, ул. Солнечная, д. 3А, стр. 1, помещ. 20Б/3
ОГРН 1217300010476
ИНН 7325174845