Git: как от «ой, я всё удалил» до «я — бог кода»
(гайд без занудства, с огнём, юмором и примерами, которые не выкинешь из головы)
Прежде чем ты скажешь «SVN? Это ещё что за динозавр?»
Представь: ты сидишь в офисе, где-то в подвале гудит сервер, и один-единственный глюк стирает всю историю коммитов. Тимлид орёт, продакт плачет, а ты думаешь: «Ну всё, писец, завтра в Макдак».
Именно так SVN (да, Subversion, тот самый централизованный динозавр) заканчивал карьеры в нулевых.
Git же зашёл в индустрию, как рок-звезда на сцену: «Ребята, держите полную копию истории каждому в кармане. Работайте в метро, в самолёте, в туалете на даче без сети. Потом синхнетесь — и всё будет огонь».
Параллельные реальности кода? Да, пожалуйста. Хочешь — мерж, хочешь — забей.
Настройка Git: настрой себя, пока git не настроил тебя
Начинающие часто клонируют репозиторий и сразу пишут код, игнорируя конфиг — а потом ловят неожиданные конфликты. Классика: PR разваливается из-за разных переносов строк между Windows и Linux.
Git стоит настроить до первого коммита, чтобы не тратить время на разборку мусора в истории.
-
Переносы строк (Windows → Linux):
git config --global core.autocrlf input# теперь Windows не сломает переносы в репозитории
-
Ваша подпись:
git config --global user.name "Иван 'Ctrl-Z' Разработчик"# Git будет подписывать коммиты вашим именем и почтой
git config --global user.email "ivan@dev.com" -
Сразу main вместо master:
git config --global init.defaultBranch main# по умолчанию ветка будет называться main
Кажется, мелочь? Запомни: одна строчка сейчас = тысяча нервных клеток потом.
Команды, которые надо знать спросони (и не забыть до вечера)
Табличка «выжившего» в джунглях Git:
Команда | Что делает | Почему это круто |
---|---|---|
git clone | Копирует репу себе | За секунду воруешь чужой год работы |
git add . | Готовит всё к коммиту | Чёткая грань «вот этот мусор — нет, код — да» |
git commit -m "feat: добавил 🔥" | Фиксирует снимок | История твоих побед и провалов |
git branch fix/память-утекла | Новая ветка | Параллельная вселенная без последствий |
git checkout -b hotfix/пожар | Переключиться и создать | Как телепорт, но без дыма |
git merge main | Сливаем миры | Иногда с фейерверком конфликтов |
git rebase -i HEAD~3 | Переписываем историю | Как будто тебя никто не ловил на баге |
git status / git log | Компас и дневник | Пока не потерялся в лесу коммитов |
Ветки: у каждой задачи — свой мультивселенный
Представь: ты пишешь фичу в feature/космические-перделки, а коллега чинит баг в fix/краш-на-старте. Вы даже не шепчетесь — каждый в своём временном континууме.
Одна ветка = одна задача. Иначе получится свалка, где фича, рефакторинг и хотфикс спят в одной кровати.
Плюс веток? Создаётся за миллисекунду и весит 41 байт. То есть можно щёлкать, как семечки: хочу эксперимент — держи ветку, хочу откат — бах и снёс.
Удалённые репозитории: когда код становится командной игрой
Картинка: ты пушишь в origin/main, сервер говорит «Ой, там уже есть коммит». Ты материшься, но потом понимаешь: это не баг, это повод поговорить.
Танец трёх шагов:
И да, если кто-то форс-пушнул в main, не молчи в чате — выясни, что происходит. Git только сигналит, голова решать — твоя.
Git Workflow: от «партизанского» до «корпоративного зверя»
Схема | Для кого | Как выглядит |
---|---|---|
GitHub Flow | Стартапы и веб | Ветка → PR → мердж → деплой |
Git Flow | Крупные проекты | main, develop, release/2.3.0, hotfix/огонь-в-проде |
Trunk-based | Супер-CI/CD | Всё в main, фичи за флагами |
Pull Request — это не просто diff, а мини-спектакль: описание, скрины, чек-листы, автотесты.
Хороший PR:
«feat(api): GraphQL-запросы для юзеров
- добавил схему, покрыл тестами
Closes #42, проверяйте на staging»
Плохой PR:
«фиксы» (и 400 файлов). Ппц.
Конфликты: битва за строку
Git сигналит о конфликте:
<<<<<<< HEAD
console.log("Привет");
=======
console.log("Hello");
>>>>>>> origin/main
Не паникуй. Открой конфликт в vimdiff, kdiff3 или в редакторе типа VS Code — выбери нужный вариант или объедини изменения.
Правило трёх «Н»:
1. Не паникуй.
2. Напиши тест после разрешения.
3. Напомни коллеге: если ты мержишь — он приносит пиво.
Git Hooks: автомат, который не даст тебе накосячить
Хочешь, чтобы коммит без линта не проходил? Вешаем pre-commit:
Теперь каждый раз, как ты пытаешься «быстренько закоммитить», Git щупает твой код и может плюнуть тебе в лицо. В добром смысле.
Мелочи, которые спасают жизни
- .gitignore — щит от мусора. Пропиши туда *.log, bin/, .env, чур меня!
- git stash — временная нора. Переключился на прод-огонь, стащил изменения, вернулся — и всё на месте.
- Git LFS — для тех, кто хранит 3D-модельки или видео. Иначе репа разрастётся, как мамонт в леднике.
Сообщения коммитов: фанфик для будущего себя
Сравни:
«fix» (15 минут спустя ты не вспомнишь, что именно)
и
feat(auth): добавил OAuth2-авторизацию через Google - редирект на /callback - обновил модель User - поднял coverage до 92% Closes #1337
Второе читается, как история приключений. Плюс можно автоматом генерить changelog и релиз-ноуты.
Conventional Commits — это не занудство, а костюм супергероя для твоей истории.
Git + CI/CD: код сам себя деплоит
Ты запушил в main, и через 3 минуты приложение уже греется на проде. Это не магия, это pipeline:
Git стал триггером ракеты. А ты просто сидишь и пьёшь кофе.
Где Git катится дальше?
- Partial clone — клонируй только нужные папки из монорепы, не тащи гигабайты.
- Git maintenance — фоновый уборщик: чистит, сжимает, ускоряет.
- Слухи: AI-мердж может появиться в будущем, который предугадывает конфликты раньше, чем ты их создашь.
Выходит, что
Git — это не просто add-commit-push. Это платформа для смелости:
- Хочешь эксперимент? Делай ветку.
- Сломал? Всегда можно git reflog и вернуться в прошлое.
- Хочешь изменить мир? Пушь в open-source и смотри, как миллионы качают твой код.
Так что бери терминал, улыбайся конфликтам и помни:
Великие проекты начинаются с маленького git init.
А дальше — только твоё воображение и пара терабайт SSD.