
SVN умер, да здравствует 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 config --global user.email "ivan@dev.com" # Git будет подписывать коммиты вашим именем и почтой
Сразу 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, сервер говорит «Ой, там уже есть коммит». Ты материшься, но потом понимаешь: это не баг, это повод поговорить. Танец трёх шагов:
git fetch
\# посмотреть, кто что натворил
git pull
\# подтянуть и мерджануть
git push origin feature/пилю-как-на-заводе
И да, если кто-то форс-пушнул в 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:
#!/bin/sh npm run lint || (echo "🔥 Линтер ругается, правь!" && exit 1) npm test || (echo "💥 Тесты упали, не пушь!" && exit 1)
Теперь каждый раз, как ты пытаешься «быстренько закоммитить», 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:
on: push: branches: [main] paths-ignore: ['docs/**'] jobs: build-and-deploy: - run: npm ci - run: npm run build - run: npm test - run: ./deploy.sh
Git стал триггером ракеты. А ты просто сидишь и пьёшь кофе.
Где Git катится дальше?
Partial clone — клонируй только нужные папки из монорепы, не тащи гигабайты.
Git maintenance — фоновый уборщик: чистит, сжимает, ускоряет.
Слухи: AI-мердж может появиться в будущем, который предугадывает конфликты раньше, чем ты их создашь.
Выходит, что
Git — это не просто add-commit-push. Это платформа для смелости: - Хочешь эксперимент? Делай ветку. - Сломал? Всегда можно git reflog и вернуться в прошлое. - Хочешь изменить мир? Пушь в open-source и смотри, как миллионы качают твой код.
Так что бери терминал, улыбайся конфликтам и помни:
Великие проекты начинаются с маленького git init.
А дальше — только твоё воображение и пара терабайт SSD.