Каждое важное изменение, которое производит программист, может существенно повлиять на функциональность проекта. Особенно если он разрабатывается в одной среде, а затем тестируется в другой среде, состоящей из нескольких виртуальных машин. Иногда вы можете совершать изменения (коммиты) в своем репозитории Git, но потом осознаете, что совершили ошибку. Тогда у вас возникает необходимость исправить их в своем проекте, используя командную строку, чтобы отменить последний коммит в Git и снова заставить ваш код работать.
Коммиты как временная шкала
В первую очередь важно отметить, что Git не имеет традиционной системы “отменить”, как в текстовом редакторе. Кроме того, у него есть своя собственная номенклатура для операций подобного типа. Эта номенклатура включает такие термины, как reset, revert, checkout, clean и т. д. Если думать о Git как об утилите управления временной шкалой, коммиты — это моментальные снимки момента времени или точки на временной шкале истории проекта. Таким образом, посмотреть последний коммит — это как отправиться в путешествие во времени. Кроме того, при помощи веток можно управлять несколькими временными рамками.
Использование команды git log
Вся идея любой системы контроля версий заключается в том, чтобы хранить копии проекта, чтобы вам никогда не приходилось беспокоиться о непоправимой ошибке в коде. Часто бывает так, что произведенное изменение не имеет ожидаемого результата. Иногда вам нужно увидеть изменения и проанализировать поведение проекта до и после последнего коммита. После того как вы создали историю проекта, вы можете посмотреть в ней любой коммит. Когда необходимо сделать удаление последнего коммита в Git, одной из лучших утилит для просмотра истории репозитория является команда git log. Например, git log —oneline показывает список коммитов в ветке.
Проверка хэша
Один из способов отменить последний коммит в Git, — использовать хэш. Получить хэш можно при помощи команды git log. Перед тем как сделать это, нужно выбрать нужную ветку с изменениями. Для того чтобы отменить последний коммит в Git, понадобится выбрать правильную ветку, но не всегда понятно как это сделать. Но в Git это довольно просто. Каждый коммит имеет уникальный хэш-идентификатор SHA-1. По умолчанию в git-журнале будут отображаться только коммиты для выбранной ветви. Вполне возможно, что тот, который вы ищете, находится совсем на другой. Вы можете просмотреть все коммиты по всем ветвям, выполнив команду git log —branches = *. Для того чтобы проверить конкретный commit в Git, который, по вашему мнению, был последней рабочей версией, вы можете ввести следующее: git checkout <commit hash>. Такая операция приведет к тому, что рабочий репозиторий будет соответствовать состоянию этого коммита. После анализа конкретного commit в Git, если вы затем решите остаться в этом состоянии, то сможете отменить и последний коммит.
Как отменить ошибочный коммит
Если вы хотите отменить последний коммит, то можете использовать <commit hash>, который получаете из команды git log, а затем написать такую команду: git revert <commit hash>. Она создаст новый коммит со словом «Восстановить» в начале сообщения. После этого, если вы проверите свой статус репозитория, то заметите, что отключили HEAD в коммите, который тестировали ранее. Но вряд ли вы хотите видеть это сообщение. Поэтому, чтобы исправить ситуацию и подключить HEAD к рабочему репозиторию, вы должны проверить ветку, над которой работаете и ввести команду: git checkout <current branch>.
Разница между git reset и git revert
Существуют и другие способы отменить последний коммит в Git. Команда git revert отменяет его, создавая новый, который представляет более раннее состояние репозитория. Но существует еще и git reset. Важно понимать разницу между git reset и git revert при использовании Git. Команда git reset отменяет коммит, удаляя предыдущие из репозитория. Она также перезагружает Git HEAD до более раннего коммита, как было описано выше.
Как выбрать команду для отмены изменений
В зависимости от того, какой вариант используется, некоторые истории Git могут быть потеряны. Команда git revert отменяет коммит, создавая новый, который представляет более раннее состояние репозитория. Это не приведет к потере истории Git. Итак, важно помнить, что существует несколько способов «отменить» в проекте Git. Вариант с git reset лучше всего использовать для отмены локальных частных изменений. А git revert — лучший инструмент для отмены общих публичных изменений. Каждая из этих команд имеет свою собственную подробную документацию, с которой можно ознакомиться отдельно. Следует помнить, что как только изменения были совершены, они обычно остаются постоянными, потому посмотреть последний коммит Git бывает полезной функцией.