git reset
Передвинуть ветку на другой коммит, например отменить последние коммиты
Что делает
git reset переставляет текущую ветку на указанный коммит. HEAD~1 — это коммит перед последним, HEAD~3 — на три назад. Коммиты после него пропадают из ветки, а что станет с их изменениями, решает флаг.
--soft оставляет изменения в индексе: их можно сразу закоммитить заново, например одним коммитом вместо нескольких. Без флага (режим --mixed) изменения остаются в файлах, но уходят из индекса. --hard выбрасывает их совсем.
Осторожно. --hard стирает и отменённые коммиты, и все незакоммиченные правки в отслеживаемых файлах. Коммиты, которые уже на сервере, лучше отменять через git revert: reset переписывает историю, и обычный git push не пройдёт.
Синтаксис
git reset --soft <коммит>
git reset <коммит>
git reset --hard <коммит>Примеры
Отменить последний коммит, оставив его изменения в индексе
git reset --soft HEAD~1то же самое:
git reset --soft HEAD^reset— передвинуть ветку на другой коммит--soft— изменения остаются в индексеHEAD~1— на один коммит назад
Выбросить последний коммит вместе со всеми его изменениями
git reset --hard HEAD~1то же самое:
git reset --hard HEAD^reset— передвинуть ветку--hard— стереть изменения — без возвратаHEAD~1— на один коммит назад
Связанные команды
- git restore — Отменить правки в файле или убрать его из индекса
- git revert — Отменить коммит новым коммитом, не переписывая историю
- git commit — Сохранить изменения из индекса в историю как новый коммит