Если коммиты 4 и 5 находятся только в вашем хранилище и не были перенесены или вытянуты каким-либо другим хранилищем, вы можете просто:
git reset --hard SHA1_HASH_OF_COMMIT_3
Вы можете узнать хэш SHA1 коммита с помощью git log
или использовать более продвинутые методы именования, см. git help rev-parse
, в частности, раздел «УКАЗАНИЯ ПЕРЕСМОТРОВ».
Использование этой команды оставит коммиты 4 и 5 недоступными из кончика ветви.Тем не менее, коммиты не будут потеряны, так как эти коммиты хранятся в рефлоге ветки.Вы можете использовать git reflog
для определения недоступного коммита.Восстановление можно затем выполнить с помощью другого git reset --hard
.Эта страница здесь описывает все это довольно хорошо.
Рекомендуется регулярно запускать git gc
;некоторые команды также делают это автоматически.По сути, это выполняет «служебную работу» с хранилищем, например «сжатие версий файлов (для уменьшения места на диске и повышения производительности) и удаление недоступных объектов».Недоступные объекты удаляются из хранилища через (по умолчанию) 30 дней.Это можно изменить с помощью опции конфигурации gc.reflogExpireUnreachable
.