git reset: сдвинуть указатель ветки назад

Обновлено 31 июля 2026 г.

git reset переставляет указатель текущей ветки на другой коммит, а режимы --soft, --mixed и --hard решают, что при этом станет с индексом и с файлами. Ветка - это указатель на коммит, поэтому «отмена коммита» тут означает сдвиг указателя, а не удаление чего-либо из архива.

$ git log --oneline
ac8aecb черновик про бюджет
435eda7 добавил раздел про найм
00ef0ff первая версия отчёта

$ git reset --soft HEAD~1
$ git status --short
M  report.txt

--soft снимает только коммит. Его изменения целиком остаются в индексе, и следующий git commit соберёт из них новый снимок. Так объединяют два мелких коммита в один или переписывают неудачное сообщение.

--mixed работает по умолчанию, когда режим не указан. Коммит снят, изменения остались в файлах, но из индекса вынуты:

$ git reset HEAD~1
Unstaged changes after reset:
M	report.txt

--hard не оставляет ничего: и коммит снят, и рабочий каталог приведён к новой позиции.

$ git reset --hard HEAD~1
HEAD is now at 435eda7 добавил раздел про найм

Это единственный режим, после которого работа может пропасть насовсем. Снятый коммит найдётся по хешу в git reflog, а правки, которые не попали ни в коммит, ни в индекс, ни в git stash, не найдутся нигде.

Reset уместен, пока коммиты живут только на твоей машине: переписал историю, никто не заметил. Ветка уже на сервере и кто-то её забрал - сдвиг указателя разойдётся с чужой историей, и там нужен git revert.

Частые ошибки

git reset с именем файла - другая операция. Указатель ветки она не двигает, а вынимает файл из индекса, то есть делает то же, что git restore --staged. Одно имя, две роли; с версии 2.23 для файлов лучше брать git restore.

HEAD~1 значит «на один коммит назад», а не «последний коммит». git reset --hard HEAD историю не трогает вовсе, зато молча выбрасывает все несохранённые правки в файлах. Если сомневаешься, что именно уедет, сначала посмотри git status и git diff.

Где это в учебнике

Три режима reset и выбор между reset и revert разобраны в восьмой главе.

Глава 8. Аптечка: когда что-то пошло не так

Потренироваться руками - в Песочнице: настоящий терминал с git и проверка шагов.