Git Reset --hard
Последнее обновление
git reset --hard перемещает вашу ветку на целевой коммит и заставляет и индекс (staging area), и рабочее дерево точно ему соответствовать - отбрасывая по пути каждое незакоммиченное изменение. Это самая разрушительная форма git reset, поэтому убедитесь, что текущая работа вам больше не нужна, прежде чем запускать его.
Случайно отменили коммит? Hard reset обычно можно восстановить через git reflog. Попробуйте это безопасно в терминальном playground - настоящая оболочка в вашем браузере.
Синтаксис
| Command | What it does |
|---|---|
git reset --hard | Отбрасывает все незакоммиченные изменения (остаётся на HEAD) |
git reset --hard HEAD~1 | Удаляет последний коммит и его изменения |
git reset --hard <hash> | Принудительно возвращает ветку к конкретному коммиту |
git reset --hard origin/main | Делает локальную ветку точной копией удалённой |
Восстановление после hard reset
Закоммиченная работа, которую вы отбросили через reset, обычно всё ещё восстановима.
| Step | Command | Result |
|---|---|---|
| 1 | git reflog | Выводит список, где был HEAD, с хешами |
| 2 | git reset --hard <hash> | Возвращает к коммиту, который был до reset |
Частые вопросы про git reset --hard
Что на самом деле делает git reset --hard?
--soft (который оставляет изменения проиндексированными) и --mixed (который оставляет их непроиндексированными), --hard - единственный режим, который выбрасывает изменения.Как отменить все мои локальные изменения?
git reset --hard без указания коммита, чтобы сбросить рабочее дерево к последнему коммиту, стирая незакоммиченные правки. Чтобы также удалить неотслеживаемые файлы, которых reset не касается, следом выполните git clean -fd.Как сбросить мою ветку, чтобы она совпадала с удалённой?
git fetch, затем git reset --hard origin/main (подставьте свою ветку). Это принудительно приводит вашу локальную ветку в точное соответствие удалённой, отбрасывая локальные коммиты и изменения, которые от неё отклонились - полезно, когда локальная ветка пошла не так и вам просто нужна версия из удалённого репозитория.Можно ли отменить git reset --hard?
git reflog, чтобы найти коммит, на который указывала ваша ветка до reset, затем git reset --hard <hash>, чтобы вернуться к нему. Изменения, которые никогда не были закоммичены (только в рабочем дереве), восстановить нельзя, поэтому обращайтесь с --hard осторожно.Можно ли попрактиковаться в этом онлайн?
git reset --hard в настоящей оболочке в вашем браузере - ничего устанавливать не нужно. Бесплатный интерактивный курс Git от Coddy также пошагово охватывает сброс и отмену изменений.