DevOps и инфраструктура

Учебник Git и GitHub для начинающих

40 уроков · 10 разделов · бесплатно, без регистрации

Практический курс по Git и GitHub для тех, кто начинает с нуля. Вы поймёте, как работает контроль версий, научитесь делать коммиты и управлять ветками, разрешать конфликты, работать с удалёнными репозиториями и командой через Pull Request, а в конце освоите продвинутые приёмы: stash, rebase, теги и cherry-pick. Каждый урок — с практическими командами, понятными примерами и мини-квизом для закрепления.

Курс «Git и GitHub» состоит из 10 разделов и 40 уроков: Введение и основы, Базовый рабочий цикл, Ветвление и слияние, Удалённые репозитории, Командная работа на GitHub, Полезные приёмы, Git под капотом: объектная модель, Перезапись истории, Рабочие процессы команды и Мощные инструменты Git. Уроки идут по порядку — от основ к более сложным темам, в каждом есть объяснение с примерами, а в конце — вопросы для самопроверки. К урокам привязаны задачи с автоматической проверкой: прочитали тему — сразу закрепили её кодом.

Программа курса

  1. 1 Введение и основы

    1. Что такое контроль версий и зачем он нужен

      Зачем нужны системы контроля версий, чем git отличается от папок «проект_финал_v2» и что такое распределённая модель.

    2. Установка и первичная настройка git

      Как установить git на Windows, macOS и Linux и обязательно настроить user.name и user.email перед первым коммитом.

    3. Первый репозиторий: git init и git clone

      Два способа завести репозиторий: создать новый с нуля через git init или скопировать существующий через git clone.

    4. Три состояния файлов в git

      Рабочая директория, индекс (staging area) и репозиторий: как файл проходит путь от правки до сохранённого коммита.

  2. 2 Базовый рабочий цикл

    1. git status: что происходит в репозитории

      Команда git status показывает состояние файлов: что изменено, что в индексе, а что git ещё не отслеживает.

    2. git add и .gitignore: управляем индексом

      Как добавлять изменения в индекс командой git add и как исключать лишние файлы из репозитория с помощью .gitignore.

    3. git commit и хорошие сообщения коммитов

      Как фиксировать изменения командой git commit и почему понятные сообщения коммитов экономят часы работы команде.

    4. Просмотр истории: log, show и diff

      Как изучать историю проекта: git log для списка коммитов, git show для содержимого коммита и git diff для сравнения версий.

  3. 3 Ветвление и слияние

    1. Что такое ветки и зачем они нужны

      Ветки в git — это лёгкие подвижные указатели на коммиты, позволяющие вести параллельную разработку без риска для основной версии.

    2. Создание и переключение веток

      Команды git branch, git switch и git checkout: как создавать ветки, переключаться между ними и удалять ненужные.

    3. Слияние веток: merge, fast-forward и merge-коммит

      Как объединять ветки командой git merge, в чём разница между fast-forward и созданием merge-коммита.

    4. Разрешение конфликтов слияния

      Почему возникают конфликты слияния, как читать маркеры конфликтов и пошагово их разрешать.

  4. 4 Удалённые репозитории

    1. Remote и GitHub: что такое удалённый репозиторий

      Что такое remote, как git связывает локальный репозиторий с GitHub и зачем нужны удалённые репозитории команде.

    2. Подключение remote и git push

      Как привязать локальный репозиторий к GitHub командой git remote add и отправить коммиты на сервер через git push.

    3. Получение изменений: fetch и pull

      Чем git fetch отличается от git pull, как безопасно забирать чужие изменения с сервера и не перезаписать свою работу.

    4. Отслеживаемые ветки и upstream

      Что такое отслеживаемая ветка и upstream, как git понимает, куда пушить и откуда тянуть изменения.

  5. 5 Командная работа на GitHub

    1. Форки: работа с чужими проектами

      Что такое форк на GitHub, чем он отличается от клона и как настроить связь с оригинальным репозиторием через upstream.

    2. Pull Request и код-ревью

      Что такое Pull Request на GitHub, как его создать и пройти код-ревью — центральный механизм командной разработки.

    3. Issues и обсуждения проекта

      Как использовать Issues на GitHub для задач и багов, связывать их с коммитами и Pull Request и организовывать работу.

    4. Командный workflow: feature branch → PR → merge

      Типичный командный процесс разработки на GitHub: отдельная ветка под задачу, Pull Request, ревью и слияние в main.

  6. 6 Полезные приёмы

    1. git stash: временно отложить изменения

      Как командой git stash временно спрятать незакоммиченные изменения, переключиться на другую задачу и вернуть их обратно.

    2. restore, reset и revert: три способа отмены

      Главная развилка новичка: чем отличаются git restore, git reset и git revert и когда использовать каждую из команд.

    3. git rebase и золотое правило истории

      Что делает git rebase, чем он отличается от merge и почему нельзя переписывать уже опубликованную историю.

    4. Теги, релизы и git cherry-pick

      Как помечать версии тегами для релизов и переносить отдельные коммиты между ветками командой git cherry-pick.

  7. 7 Git под капотом: объектная модель

    1. Объектная модель Git: blob, tree, commit

      Как git хранит данные: объекты blob, tree, commit, content-addressable хранилище, SHA-1/SHA-256, git cat-file и hash-object, снимки вместо дельт.

    2. Ссылки и HEAD: что такое ветка на самом деле

      Ветка как указатель на коммит, refs/heads, HEAD и detached HEAD, разница между аннотированными и lightweight-тегами в git.

    3. reflog: машина времени и спасение потерянных коммитов

      git reflog: как восстановить коммиты после reset --hard и неудачного rebase, вернуть удалённую ветку, сроки garbage collection в git.

    4. Устройство .git: packfiles, индекс, gc

      Что внутри каталога .git: loose и packed объекты, packfiles и дельта-сжатие, индекс как дерево staging, git gc и ускорение хранилища.

  8. 8 Перезапись истории

    1. Интерактивный rebase: squash, fixup, reword, drop

      Глубокий разбор git rebase -i: todo-лист, склейка коммитов squash и fixup, переименование reword, удаление drop, разбиение коммита и золотое правило.

    2. reset вглубь: soft, mixed, hard и чем отличается от revert

      Модель трёх деревьев Git: HEAD, индекс и рабочая директория. Чем отличаются soft, mixed и hard reset, когда какой применять и reset vs revert vs restore.

    3. amend и autosquash: аккуратная история

      git commit --amend для последнего коммита и связка --fixup с rebase --autosquash для адресной правки старых коммитов без ручного интерактивного rebase.

    4. Очистка истории: удалить файл/секрет, filter-repo

      Как убрать большой файл или утёкший секрет из всей истории Git с помощью git filter-repo и BFG, и почему важен force-push с --force-with-lease.

  9. 9 Рабочие процессы команды

    1. Стратегии ветвления: Git Flow, GitHub Flow, trunk-based

      Сравнение Git Flow, GitHub Flow и trunk-based development: release, hotfix и feature-ветки, плюсы и минусы, когда какую модель ветвления выбирать.

    2. Конвенция коммитов и семантическое версионирование

      Conventional Commits (feat, fix, BREAKING CHANGE) и их связь с semver MAJOR.MINOR.PATCH: как из сообщений коммитов автоматически считать версию и генерировать changelog.

    3. Код-ревью и защита веток

      Pull Request как процесс ревью: required reviews, branch protection, CODEOWNERS, status checks и draft PR — как защитить основную ветку и наладить качественное код-ревью.

    4. rebase или merge: стратегии истории команды

      Линейная против ветвистой истории Git: merge-, squash- и rebase-слияние Pull Request, история в монорепо и практические правила, когда какую стратегию выбирать.

  10. 10 Мощные инструменты Git

    1. git bisect: поиск сломавшего коммита бинарным поиском

      git bisect находит сломавший коммит бинарным поиском за log2(N) шагов: start/good/bad, автоматизация через bisect run и код 125 для пропуска ревизий.

    2. git worktree: несколько веток одновременно

      git worktree держит несколько веток репозитория в разных папках без stash и второго clone: add, list, remove, prune и общая база объектов под капотом.

    3. Подмодули и subtree: вложенные репозитории

      Submodule как ссылка на коммит против subtree со слитой историей: add/update/init, --squash, плюсы и минусы и типичные грабли вложенных репозиториев.

    4. Хуки и подписи коммитов

      Git-хуки pre-commit и pre-push для автопроверок, GPG/SSH-подпись коммитов и тегов, плашка Verified и археология истории через blame и log -S.