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 и проверка шагов.