Предостережения при использовании git reset
Использование команд, изменяющих историю Git, на публичных ветках (например, master, release, develop) не рекомендуется. Изменение истории публичных веток, используемых несколькими разработчиками, может привести к непредсказуемым последствиям на других компьютерах. Безопаснее применять такие команды на приватных ветках (например, feature-ветках), над которыми вы работаете в одиночку.
Команда git reset
git reset отменяет коммиты. Если вас не устраивают изменения в одном или нескольких коммитах, git reset позволяет вернуться к предыдущему состоянию репозитория. Команда имеет три варианта: —hard, —mixed (режим по умолчанию) и —soft. В зависимости от выбранного варианта, изменения по-разному затрагивают рабочую директорию, staging area и репозиторий Git.
Режим по умолчанию (—mixed)
- Синхронизация: git pull (синхронизирует локальный и удаленный репозитории).
- Просмотр истории: git log (запомните SHA-1 хеш коммита, к которому хотите вернуться).
- Сброс: git reset <SHA-1 хеш> (отменяет коммит с указанным хешем). Неизмененные файлы остаются в рабочей директории. Изменения из staging area удаляются.
- Проверка состояния: git status (показывает неподготовленные к коммиту файлы).
- Возврат к предыдущему коммиту: Повторите шаги 2 и 3 для возврата к более раннему коммиту.
- Повторный коммит: После git reset можно подготовить изменения (git add .) и создать новый коммит (git commit -m "Сообщение"). Отмененные коммиты исчезнут из истории.
git reset —soft
В режиме —soft коммит отменяется, но изменения сохраняются в staging area. Это позволяет сразу создать новый коммит с теми же изменениями.
git reset —hard
Режим —hard — наиболее радикальный. Он отменяет коммит, удаляет изменения из staging area и рабочей директории. Файлы, измененные после отмененного коммита, будут удалены или возвращены к предыдущему состоянию. Используйте этот режим с осторожностью.
Сброс нескольких коммитов
Сбросить несколько последних коммитов можно командой git reset HEAD~<число>. Например, git reset HEAD~5 сбросит пять последних коммитов.
git reset — мощная, но потенциально опасная команда. Внимательно изучите режимы работы команды перед использованием, особенно на публичных ветках. Локальные изменения, сделанные с помощью git reset, не затрагивают удаленный репозиторий до отправки (git push). Альтернативой git reset является неразрушающая команда git revert.