Начальный ~25 мин чтения

Типичные сценарии и ошибки в Git

Урок 5 из 5 в курсе Git для разработчика

Типичные сценарии и ошибки в Git

знание типичных команд восстановления и исправления экономит часы при работе с реальными проектами.

Почему это важно: Большинство разработчиков сталкиваются с 'поломанным' Git и паникуют. Понимание нескольких ключевых команд решает 95% проблем.

Главная идея

Git редко теряет данные безвозвратно. Почти любую ошибку можно исправить через reflog, revert или reset.

Как это выглядит на практике

  1. Случайно закоммитили не тот файл — git restore --staged убирает его из staging.
  2. Написали плохое сообщение коммита — git commit --amend исправляет последний коммит.
  3. Нужно отменить изменения публичного коммита — git revert создаёт новый коммит-откат.
  4. Потеряли коммит после reset — git reflog показывает все недавние изменения HEAD.

Что происходит под капотом

  • git reflog — локальный журнал всех перемещений HEAD за последние 90 дней.
  • git reset --soft сохраняет изменения в staging; --mixed (по умолчанию) — в рабочей директории; --hard — удаляет.
  • git revert не переписывает историю, а добавляет новый коммит с обратными изменениями.
  • git stash сохраняет незакоммиченные изменения во временный стэк.

Типичные ошибки и заблуждения

  • Ошибка: git reset --hard безопасен. Он удаляет незакоммиченные изменения без возможности восстановления.
  • Ошибка: если удалил ветку, коммиты потеряны навсегда. Через git reflog можно найти SHA и восстановить ветку.
  • Ошибка: git revert и git reset делают одно и то же. revert — безопасен для публичной истории, reset — нет.
  • Ошибка: amend применим к любому коммиту. Amend изменяет только последний коммит и опасен, если он уже запушен.

Ключевые выводы

  • git reflog — спасательный круг при любых 'катастрофах' с Git.
  • Для публичных веток используйте revert, а не reset.
  • git stash пригодится при срочном переключении на другую задачу.
  • amend только для последнего локального коммита, который ещё не запушен.

Термины урока

reflog: локальный журнал всех перемещений HEAD.
revert: создание нового коммита, отменяющего изменения другого.
reset: перемещение HEAD и ветки назад по истории.
stash: временное сохранение незакоммиченных изменений.

Связь с работой backend-разработчика

В продакшен-среде для отмены изменений всегда используйте git revert — это безопасно и сохраняет историю аудита. reset --hard в общих ветках — это инцидент.

Мини-разбор реальной ситуации

Разработчик сделал git reset --hard HEAD~3 на ветке main, потеряв три важных коммита. Решение: git reflog показывает последние положения HEAD, включая SHA до reset. git reset --hard восстанавливает потерянные коммиты.

Что запомнить

  • Перед любым деструктивным действием проверьте git status и git log.
  • git reflog — первое место, куда смотреть при потере коммитов.
  • В публичных ветках — только revert, никогда reset.

Итог

Ошибки в Git — не катастрофа, если знаешь reflog, revert и stash. Эти три инструмента закрывают большинство аварийных ситуаций.