Git reset: управление историей коммитов безопасно

Предостережения при использовании git reset

Использование команд, изменяющих историю Git, на публичных ветках (например, master, release, develop) не рекомендуется. Изменение истории публичных веток, используемых несколькими разработчиками, может привести к непредсказуемым последствиям на других компьютерах. Безопаснее применять такие команды на приватных ветках (например, feature-ветках), над которыми вы работаете в одиночку.

Команда git reset

git reset отменяет коммиты. Если вас не устраивают изменения в одном или нескольких коммитах, git reset позволяет вернуться к предыдущему состоянию репозитория. Команда имеет три варианта: —hard, —mixed (режим по умолчанию) и —soft. В зависимости от выбранного варианта, изменения по-разному затрагивают рабочую директорию, staging area и репозиторий Git.

Режим по умолчанию (—mixed)

  1. Синхронизация: git pull (синхронизирует локальный и удаленный репозитории).
  2. Просмотр истории: git log (запомните SHA-1 хеш коммита, к которому хотите вернуться).
  3. Сброс: git reset <SHA-1 хеш> (отменяет коммит с указанным хешем). Неизмененные файлы остаются в рабочей директории. Изменения из staging area удаляются.
  4. Проверка состояния: git status (показывает неподготовленные к коммиту файлы).
  5. Возврат к предыдущему коммиту: Повторите шаги 2 и 3 для возврата к более раннему коммиту.
  6. Повторный коммит: После 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.

Что будем искать? Например,программа