← Все вопросы

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

Задан 28 месяцев назад327 просмотров2 ответа
12

Сделал коммит слишком рано, забыл добавить один файл. Хочу отменить последний коммит, но чтобы код никуда не делся. Гуглю «как откатить последний коммит git» и путаюсь между reset и revert.

2 ответа

14
✓ Принятый ответ — помог автору

Зависит от того, запушил ты уже коммит или нет.

Если коммит ещё локальный (не на GitHub) — используй мягкий reset. Он сдвигает ветку на один коммит назад, а все изменения возвращает в индекс (staged):

git reset --soft HEAD~1

Теперь файлы снова готовы к коммиту, можешь дописать что нужно и закоммитить заново. Если хочешь, чтобы изменения вернулись, но не были staged (как после простого редактирования):

git reset HEAD~1

Это то же самое, что git reset --mixed HEAD~1 (режим по умолчанию).

Если коммит ты уже запушил и над репозиторием работают другие люди — НЕ переписывай историю через reset. Вместо этого сделай новый коммит, который отменяет старый:

git revert HEAD

revert создаёт обратный коммит, история остаётся целой, и у коллег ничего не сломается при git pull.

Частая ошибка: написать git reset --hard HEAD~1 — это удалит изменения безвозвратно. --hard стирает и индекс, и рабочую папку. Если файлы важны, никогда не используй --hard, пока не уверен.

5

Короткое правило, чтобы не запутаться:

  • --soft — откатить коммит, изменения остаются в staged.
  • (без флага) --mixed — откатить коммит, изменения не staged, но в файлах есть.
  • --hard — откатить коммит и стереть изменения совсем.

Для «отменить, но сохранить» бери --soft или --mixed. HEAD~1 означает «один коммит назад от текущего».

Ваш ответ

Войдите, чтобы ответить на вопрос.