Menu
Coddy logo textTech

Git Reset

Последнее обновление

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

Поскольку --hard отбрасывает незакоммиченную работу, определитесь с нужным режимом, прежде чем его запускать. Попробуйте эти команды безопасно в терминальном playground - настоящей оболочке в вашем браузере.

Три режима

ModeMoves branchResets stagingResets working tree
--softДаНетНет
--mixed (default)ДаДаНет
--hardДаДаДа

Синтаксис

CommandWhat it does
git reset --soft HEAD~1Отменить последний коммит, оставить изменения в индексе
git reset HEAD~1Отменить последний коммит, убрать изменения из индекса
git reset --hard HEAD~1Отменить последний коммит, отбросить изменения
git reset <file>Убрать файл из индекса (сохранив его изменения)
git reset --hard origin/mainПринудительно привести локальную ветку в соответствие с удалённой

Частые случаи

GoalCommand
Убрать всё из индексаgit reset
Убрать из индекса один файлgit reset README.md
Откатиться на 3 коммита назад, сохранив работуgit reset --soft HEAD~3
Отбросить все локальные изменения с определённого коммитаgit reset --hard <hash>

Часто задаваемые вопросы о git reset

В чём разница между --soft, --mixed и --hard?
Все три перемещают указатель вашей ветки на целевой коммит; они различаются тем, что ещё затрагивают. --soft больше ничего не меняет, поэтому ваши изменения остаются в индексе. --mixed (по умолчанию) также очищает индекс, так что изменения выходят из индекса, но остаются в ваших файлах. --hard вдобавок перезаписывает рабочее дерево, чтобы оно соответствовало целевому коммиту, отбрасывая незакоммиченные изменения.
Как убрать файл из индекса с помощью git reset?
Выполните git reset <file> (например, git reset README.md) или git reset без пути, чтобы убрать из индекса всё. Это убирает файл из индекса, но сохраняет ваши правки в рабочем дереве. В новых версиях Git можно также использовать git restore --staged <file>, что делает то же самое более явно.
Обратим ли git reset --hard?
Не из рабочего дерева - --hard безвозвратно отбрасывает незакоммиченные изменения. Однако закоммиченную работу, которую вы сбросили, обычно можно восстановить: выполните git reflog, чтобы найти хеш коммита, затем git reset --hard <hash> (или создайте на нём ветку). Незакоммиченные изменения, которые никогда не добавлялись в индекс и не коммитились, восстановить нельзя, поэтому используйте --hard осторожно.
В чём разница между git reset и git revert?
git reset переписывает историю, перемещая ветку назад - нормально для локальных коммитов, но опасно для коммитов, которые вы уже отправили (push). git revert оставляет историю нетронутой и добавляет новый коммит, отменяющий более ранний, что является безопасным выбором для общих веток.
Могу ли я потренироваться онлайн?
Да. Откройте терминальный playground, чтобы выполнить git reset в настоящей оболочке в вашем браузере - ничего устанавливать не нужно. Бесплатный интерактивный курс Git от Coddy также пошагово охватывает сброс и отмену изменений.
Coddy programming languages illustration

Изучайте Git с Coddy

НАЧАТЬ