Зачем нужен Git и почему не просто обмениваться файлами
Что проверяют
Понимаете ли вы, что Git решает задачи командной работы, а не просто хранит копии файлов. Вопрос часто задают джунам, и следом просят описать ваш обычный процесс: ветки, коммиты, пул-реквесты, действия при конфликте.
Как отвечать
Обмен файлами ломается, как только над одним кодом работают двое: кто-то перезапишет чужие правки, непонятно, какая версия последняя, и нельзя вернуться к состоянию недельной давности. Git закрывает это набором механизмов:
- история: каждый коммит хранит снимок проекта, автора, дату и причину изменения.
git logиgit blameотвечают на вопрос «кто и зачем поменял эту строку», аgit revertотменяет конкретный коммит, не трогая остальные; - ветки: фича или фикс живёт отдельно, пока не готова, и не мешает основной ветке;
- слияние: Git сам объединяет правки из разных веток, а если двое поменяли одно место, показывает конфликт вместо тихой перезаписи;
- распределённость: у каждого полная копия репозитория, можно работать без сети, а коммиты адресуются хэшем содержимого, поэтому незаметно подменить историю нельзя;
- поиск регрессий:
git bisectбинарным поиском по коммитам находит тот, после которого сломалась вёрстка или тест.
Для фронтенда добавьте инфраструктуру вокруг Git: код-ревью в пул-реквестах на GitHub или GitLab, CI с линтером и тестами на каждый пуш, превью-деплой каждой ветки на Vercel или Netlify, хуки через Husky и lint-staged. Плюс .gitignore для node_modules, dist и .env и закоммиченный lock-файл (package-lock.json или аналог), чтобы у всех ставились одинаковые версии зависимостей.
Где спотыкаются
Путают Git и GitHub. Git это система контроля версий, а GitHub и GitLab хостинги с ревью и CI поверх неё.
Говорят, что ветки избавляют от конфликтов. Не избавляют, а откладывают. Меньше конфликтов дают короткие ветки и частые слияния.
Коммитят .env с ключами и думают, что удаление файла следующим коммитом решает проблему. Секрет остаётся в истории, его нужно перевыпускать.