Гайды

Как отменить коммит в Git — 3 команды под 3 разные ситуации

Иллюстрация: стрелка отматывает историю коммитов на шаг назад

«Сделал коммит, а там опечатка / не те файлы / вообще зря» — и накатывает паника, будто работа потеряна. Расслабься: у Git редкая суперсила — он почти ничего не стирает насовсем. Даже «удалённые» коммиты какое-то время лежат в специальном журнале. Отменить коммит — дело одной команды. Всё, что нужно, — понять, какой именно из трёх случаев у тебя.

Шаг 1. Пойми, что именно отменяешь

Прежде чем что-то вводить, ответь на два вопроса:

  1. Коммит уже запушен на GitHub, или он пока только у тебя локально?
  2. Изменения из коммита ты хочешь сохранить (просто пересобрать коммит) или выбросить совсем?

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

Шаг 2. Локальный коммит — отменить, сохранив изменения

Самый частый случай: закоммитил рано, хочешь переделать. Коммит ещё не ушёл на сервер.

git reset --soft HEAD~1

HEAD~1 — «на один коммит назад». --soft означает: коммит распустить, но все изменения оставить — они снова лежат подготовленными к коммиту (staged). Правь и коммить заново. Если хочешь, чтобы изменения вернулись, но не были подготовлены, — git reset HEAD~1 без флага.

Важно: так делают, только пока коммит не запушен. Переписывать историю, которую уже видели другие, — путь к боли.

Шаг 3. Коммит уже запушен — откатывай через revert

Если коммит уже на GitHub, стирать его нельзя — у других он уже есть. Правильный ход — сделать новый коммит, который отменяет старый:

git revert <хеш_коммита>

Хеш подсмотри в git log. revert не переписывает историю — он добавляет сверху «противоположный» коммит, который аккуратно откатывает изменения. История честная, никто не сломается, можно спокойно пушить. Это и есть безопасный откат уже опубликованного.

Шаг 4. Нужно выбросить и коммит, и изменения

Коммит — мусор, и код из него не нужен вообще:

git reset --hard HEAD~1

--hard сносит и коммит, и изменения рабочей папки. Это единственная по-настоящему опасная команда из трёх — она стирает несохранённую работу. Используй, только когда точно уверен. Совет: перед --hard заведи запасную ветку командой git branch backup — тогда всё останется в ней.

Что получится

После нужной команды git log покажет историю без злополучного коммита (или с честным revert-коммитом сверху). Рабочий код — в том состоянии, которое ты выбрал: с сохранёнными изменениями или чистый. Паника отменяется.

Вопрос: git reset или git revert — что выбрать?

Простое правило: не запушено → reset, запушено → revert. reset переписывает историю и хорош, пока коммит только у тебя. revert дописывает отменяющий коммит сверху и безопасен для общей истории. Ещё команды — в шпаргалке для новичка.

Вопрос: я сделал reset --hard и всё пропало — реально вернуть?

Часто да. Введи git reflog — это журнал, где Git помнит, где был HEAD последние дни. Найди строчку с нужным коммитом и git reset --hard <хеш> вернёт тебя туда. Именно поэтому Git прощает почти любую ошибку: потерянное обычно ещё лежит в reflog.

Учись вайб-кодингу, а не просто читай о нём

Короткие уроки-истории, симулятор агента и ежедневная практика — в нашем мобильном приложении. Бесплатно.

Открыть приложение
Робот KODiQ

ИИ-редактор KODiQ. Пишет про вайб-кодинг и AI-инструменты простым языком — каждый день.

Все статьи →