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

Если у вас возникла ситуация, когда вы уже сделали коммит, но хотите добавить в него новые данные, можно воспользоваться командой:
git commit -a --amend
ключ —amend будет означать что нужно добавить новые изменения в последний коммит.
Если вы сделали коммит, но решили его удалить (отменить), то есть 2 варианта решения этого вопроса.
Чтобы отменить коммит, но ОСТАВИТЬ все изменения (файлы и правки в файлах НЕ будут удалены), нужно ввести команду:
git reset --soft HEAD^
ключ —soft указывает на то что изменения не будут удалены
Чтобы удалить коммит и все файлы (изменения), нужно ввести команду:
git reset --hard HEAD^
ключ —hard говорит о том, что нужно удалить и коммит и файлы
Также вместо значения HEAD^ вы можете указать hash любого другого коммита (не последнего).
Все эти способы работают если вы еще не опубликовали изменения на сервере. Если же нужно отменить коммит на сервере, нужно воспользоваться командой:
git revert *COMMIT-sha1* git push
где *COMMIT-sha1* — id вашего коммита
Как отменить коммит так, чтобы с проектом никаких изменений не произошло? [дубликат]
Пытаюсь закоммитить на GitHub большой проект по частям — по 500Мб, постепенно удаляя определенные папки из .gitignore. Пока так делал все было хорошо. Но случайно закоммитил сразу 1.5Гб, теперь выдает ошибку при синхронизации с GitHub. Как можно отменить этот коммит, чтобы с моим локальным проектом никаких изменений не произошло? И еще вопрос. Это нормальная практика — коммитить проекты по 5Гб?
Отслеживать
34k 25 25 золотых знаков 130 130 серебряных знаков 222 222 бронзовых знака
задан 6 июл 2015 в 8:52
Amazing User Amazing User
741 1 1 золотой знак 11 11 серебряных знаков 28 28 бронзовых знаков
Рекомендуется обходиться проектами не более 1 Gb объёмом: help.github.com/articles/what-is-my-disk-quota
6 июл 2015 в 9:06
Думаю, для того, чтобы кто-то мог помочь, стоит описать ситуацию подробнее, например, добавить используемую последовательность действий и полученные сообщения
6 июл 2015 в 9:08
Речь об этом репозитории? github.com/dmitrykozyr/Home
6 июл 2015 в 9:28
Делаю все через интерфейс GitHub: 1. Нажал «Закоммитить» 2. Нажал «Синхронизировать» Уже часть проекта так загрузил на GitHub, часть еще осталась
6 июл 2015 в 9:28
Это абсолютно ненормальная практика, код — это текстовые файлы, и сложно представить себе проект с таким весом. Что у вас там, бинарные данные?
Как отменить последний коммит

Допустим, вы работаете над кодом в Git и вдруг что-то пошло не по плану. Вам нужно отменить ваш последний коммит. Как это сделать? Давайте разберемся!
Отменить последний коммит можно двумя способами. В этой статье мы рассмотрим оба.
Команда git revert
Команда git revert создает коммит, который возвращает изменения, внесенные с указанным коммитом. С помощью этой команды можно отменить последний коммит:
git revert
Найти имя коммита, который нужно вернуть, можно при помощи команды git log. Первый коммит в выдаче и будет вашим последним созданным коммитом.
Вы можете скопировать его хэш (цифробуквенный идентификатор) и использовать его в команде revert.
Команда git reset
Отменить последний коммит можно также при помощи команды git reset. Но будьте осторожны: это изменит историю коммитов. Пользуйтесь этой командой пореже.
Эта команда смещает HEAD на последний коммит. По умолчанию используется опция —mixed. Все изменения после указанного коммита останутся в рабочем каталоге как неотслеживаемые.
git reset HEAD~1
Опция —soft позволяет сохранить незакоммиченные изменения (если они были) как staged.
git reset --soft HEAD~1
Если вы хотите сбросить все до последнего коммита, а также удалить все неподготовленные изменения, можно использовать опцию —hard.
git reset --hard HEAD~1
Таким образом вы вернетесь в положение до последнего коммита, но вместе с тем сотрете все изменения, не попавшие в коммит.
Что лучше использовать: reset или revert?
Используйте reset исключительно для сброса коммитов, существующих лишь локально. Эта команда меняет историю коммитов. А это может негативно сказаться на работе удаленных членов команды, которые могли основывать что-то на коммите, который вы сотрете.
Команда revert создает новый коммит, отменяющий изменения, и не перезаписывает историю коммитов. Так что, если коммит, который вы хотите вернуть, уже был запушен в общий репозиторий, лучше использовать revert.
Заключение
Мы разобрали два способа отменить последний коммит, а также разобрали, когда какой лучше использовать.
Теперь вы знаете, что делать, если вы вдруг заметите баг в вашем последнем коммите, или окажется, что изменения вовсе не должны были попасть в коммит!
Как отменить последний коммит git
Тут нужно понять, что именно необходимо сделать. Потому что под отменой часто понимают удаление последнего коммита. Удалить последний коммит можно очень просто с помощью команды git reset . Причём можно как сохранить изменения в рабочей директории, так и полностью удалить все изменения сделанные в последнем коммите.
# удаляем только коммит git reset --hard HEAD~ # удаляем коммит и изменения
А вот отменить изменения сделанные в последнем коммите можно с помощью команды git revert . Она делает еще один коммит, но с противоположными изменениями.
# нужно передать ей хеш коммита, который мы отменяем
28 декабря 2022
Обратите внимание, что команда git reset может быть опасна, поскольку она изменяет историю репозитория. Поэтому важно следить за тем, что вы делаете, и убедиться, что вы работаете над локальным репозиторием, а не с удаленным репозиторием, так как при изменении истории удаленного репозитория у других участников могут возникнуть проблемы с синхронизацией своих локальных репозиториев.