> Как откатывать изменения в Git

Уровень: senior · Категория: Технические вопросы

Компании: Aston

> Пример ответа

Откат изменений в Git зависит от того, на каком этапе вы находитесь. Вот основные сценарии:

  1. Если изменения ещё не добавлены в индекс (не выполнена команда git add):
    Используйте git checkout -- <файл> или git restore <файл> (в новых версиях Git). Это отменит изменения в рабочей директории, вернув файл к состоянию последнего коммита.

  2. Если изменения уже добавлены в индекс (выполнен git add):
    Сначала снимите их с индекса: git reset HEAD <файл> или git restore --staged <файл>. Затем, если нужно, откатите рабочую директорию командой git checkout -- <файл>.

  3. Если вы уже сделали коммит, но он не был отправлен в удалённый репозиторий:

    • git reset --soft HEAD~1 - откатывает коммит, но оставляет изменения в индексе (готовыми к новому коммиту).
    • git reset --mixed HEAD~1 (по умолчанию) - откатывает коммит и снимает изменения с индекса, но оставляет их в рабочей директории.
    • git reset --hard HEAD~1 - полностью удаляет коммит и все изменения (осторожно: данные теряются).
  4. Если коммит уже отправлен в удалённый репозиторий (например, на GitHub):
    Используйте git revert <хеш_коммита>. Эта команда создаёт новый коммит, который отменяет изменения указанного коммита. Это безопасно для совместной работы, так как не переписывает историю.

  5. Для отката к определённому коммиту (без удаления промежуточных):
    git revert HEAD~3..HEAD - отменит последние три коммита, создав для каждого новый коммит отмены.

Важно: Избегайте git reset --hard и git push --force в общих ветках, чтобы не сломать историю для коллег. Для локальных экспериментов reset удобен, для публичных веток - только revert.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью