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

Из статьи вы узнаете, как правильно отменить последний Git-коммит. Приведена не только теория, но также необходимые команды.

Работая с системой управления версиями Git, вы рано или поздно столкнетесь с распространенной проблемой: случайный коммит ненужных критических изменений. Неплохо, если это только ваш проект, но если речь идет о чем-то более масштабном, предназначенном для целой команды разработчиков, такие ситуации оказываются очень неприятными. Разберемся, как это исправить.

Удалите Git-коммит новым коммитом

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

Выполните:

git revert HEAD

Команда revert означает возврат состояния к HEAD – последнему коммиту в ветке.

Появится следующее сообщение:

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

Если открытие редактора не нужно, к исходной команде добавляется --no-edit. Смотрим, как это работает:

git revert HEAD --no-edit

Чтобы удостовериться, что все сделано правильно, выполняется:

git log

Предыдущий неправильный коммит будет присутствовать в логах, но также вы увидите его удаление:

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

Проверьте Git-статус следующей командой:

git status

Если нужно откатиться к конкретному коммиту, вместо HEAD вписывается его хеш или тег (можно посмотреть в логах/истории). Иногда такая отмена невозможна из-за конфликтов, то есть произошли изменения, которые Git не может отменить. Увидеть конфликтный файл для дальнейшего решения проблемы поможет git status.

Используйте команду reset

Как видите, revert оставляет «следы» в истории ветки, а иногда нужно подобную ошибку скрыть. К возможностям reset относятся:

  1. Переписывание текущей ветки, которая будет указывать на необходимый коммит.
  2. Сброс буферной зоны (опционально).
  3. Сброс рабочего каталога (опционально).

Для начала отметьте нужную ветку:

git tag oops

Теперь выполните сброс до коммита oops:

git reset --hard t1

Посмотрите историю:

git hist

Однако все равно ничто не теряется. Запустите команду отображения всех коммитов:

git hist --all

Вы увидите, что ошибочные коммиты все еще на месте, просто удалены из нашей ветки. Опасность данного отката состоит в том, что в случае командной работы такой сброс может сбить с толку других разработчиков, поэтому настоятельно рекомендуется использовать revert.

Вас также могут заинтересовать другие статьи по теме:

Комментарии

ВАКАНСИИ

Добавить вакансию
Разработчик C++
Москва, по итогам собеседования

ЛУЧШИЕ СТАТЬИ ПО ТЕМЕ