Типичные сценарии и ошибки в Git
знание типичных команд восстановления и исправления экономит часы при работе с реальными проектами.
Почему это важно: Большинство разработчиков сталкиваются с 'поломанным' Git и паникуют. Понимание нескольких ключевых команд решает 95% проблем.
Главная идея
Git редко теряет данные безвозвратно. Почти любую ошибку можно исправить через reflog, revert или reset.
Как это выглядит на практике
- Случайно закоммитили не тот файл — git restore --staged убирает его из staging.
- Написали плохое сообщение коммита — git commit --amend исправляет последний коммит.
- Нужно отменить изменения публичного коммита — git revert создаёт новый коммит-откат.
- Потеряли коммит после 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 только для последнего локального коммита, который ещё не запушен.
Термины урока
Связь с работой 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. Эти три инструмента закрывают большинство аварийных ситуаций.