Учебник Git и GitHub для начинающих
Практический курс по Git и GitHub для тех, кто начинает с нуля. Вы поймёте, как работает контроль версий, научитесь делать коммиты и управлять ветками, разрешать конфликты, работать с удалёнными репозиториями и командой через Pull Request, а в конце освоите продвинутые приёмы: stash, rebase, теги и cherry-pick. Каждый урок — с практическими командами, понятными примерами и мини-квизом для закрепления.
Курс «Git и GitHub» состоит из 10 разделов и 40 уроков: Введение и основы, Базовый рабочий цикл, Ветвление и слияние, Удалённые репозитории, Командная работа на GitHub, Полезные приёмы, Git под капотом: объектная модель, Перезапись истории, Рабочие процессы команды и Мощные инструменты Git. Уроки идут по порядку — от основ к более сложным темам, в каждом есть объяснение с примерами, а в конце — вопросы для самопроверки. К урокам привязаны задачи с автоматической проверкой: прочитали тему — сразу закрепили её кодом.
Программа курса
1 Введение и основы
- Что такое контроль версий и зачем он нужен
Зачем нужны системы контроля версий, чем git отличается от папок «проект_финал_v2» и что такое распределённая модель.
- Установка и первичная настройка git
Как установить git на Windows, macOS и Linux и обязательно настроить user.name и user.email перед первым коммитом.
- Первый репозиторий: git init и git clone
Два способа завести репозиторий: создать новый с нуля через git init или скопировать существующий через git clone.
- Три состояния файлов в git
Рабочая директория, индекс (staging area) и репозиторий: как файл проходит путь от правки до сохранённого коммита.
- Что такое контроль версий и зачем он нужен
2 Базовый рабочий цикл
- git status: что происходит в репозитории
Команда git status показывает состояние файлов: что изменено, что в индексе, а что git ещё не отслеживает.
- git add и .gitignore: управляем индексом
Как добавлять изменения в индекс командой git add и как исключать лишние файлы из репозитория с помощью .gitignore.
- git commit и хорошие сообщения коммитов
Как фиксировать изменения командой git commit и почему понятные сообщения коммитов экономят часы работы команде.
- Просмотр истории: log, show и diff
Как изучать историю проекта: git log для списка коммитов, git show для содержимого коммита и git diff для сравнения версий.
- git status: что происходит в репозитории
3 Ветвление и слияние
- Что такое ветки и зачем они нужны
Ветки в git — это лёгкие подвижные указатели на коммиты, позволяющие вести параллельную разработку без риска для основной версии.
- Создание и переключение веток
Команды git branch, git switch и git checkout: как создавать ветки, переключаться между ними и удалять ненужные.
- Слияние веток: merge, fast-forward и merge-коммит
Как объединять ветки командой git merge, в чём разница между fast-forward и созданием merge-коммита.
- Разрешение конфликтов слияния
Почему возникают конфликты слияния, как читать маркеры конфликтов и пошагово их разрешать.
- Что такое ветки и зачем они нужны
4 Удалённые репозитории
- Remote и GitHub: что такое удалённый репозиторий
Что такое remote, как git связывает локальный репозиторий с GitHub и зачем нужны удалённые репозитории команде.
- Подключение remote и git push
Как привязать локальный репозиторий к GitHub командой git remote add и отправить коммиты на сервер через git push.
- Получение изменений: fetch и pull
Чем git fetch отличается от git pull, как безопасно забирать чужие изменения с сервера и не перезаписать свою работу.
- Отслеживаемые ветки и upstream
Что такое отслеживаемая ветка и upstream, как git понимает, куда пушить и откуда тянуть изменения.
- Remote и GitHub: что такое удалённый репозиторий
5 Командная работа на GitHub
- Форки: работа с чужими проектами
Что такое форк на GitHub, чем он отличается от клона и как настроить связь с оригинальным репозиторием через upstream.
- Pull Request и код-ревью
Что такое Pull Request на GitHub, как его создать и пройти код-ревью — центральный механизм командной разработки.
- Issues и обсуждения проекта
Как использовать Issues на GitHub для задач и багов, связывать их с коммитами и Pull Request и организовывать работу.
- Командный workflow: feature branch → PR → merge
Типичный командный процесс разработки на GitHub: отдельная ветка под задачу, Pull Request, ревью и слияние в main.
- Форки: работа с чужими проектами
6 Полезные приёмы
- git stash: временно отложить изменения
Как командой git stash временно спрятать незакоммиченные изменения, переключиться на другую задачу и вернуть их обратно.
- restore, reset и revert: три способа отмены
Главная развилка новичка: чем отличаются git restore, git reset и git revert и когда использовать каждую из команд.
- git rebase и золотое правило истории
Что делает git rebase, чем он отличается от merge и почему нельзя переписывать уже опубликованную историю.
- Теги, релизы и git cherry-pick
Как помечать версии тегами для релизов и переносить отдельные коммиты между ветками командой git cherry-pick.
- git stash: временно отложить изменения
7 Git под капотом: объектная модель
- Объектная модель Git: blob, tree, commit
Как git хранит данные: объекты blob, tree, commit, content-addressable хранилище, SHA-1/SHA-256, git cat-file и hash-object, снимки вместо дельт.
- Ссылки и HEAD: что такое ветка на самом деле
Ветка как указатель на коммит, refs/heads, HEAD и detached HEAD, разница между аннотированными и lightweight-тегами в git.
- reflog: машина времени и спасение потерянных коммитов
git reflog: как восстановить коммиты после reset --hard и неудачного rebase, вернуть удалённую ветку, сроки garbage collection в git.
- Устройство .git: packfiles, индекс, gc
Что внутри каталога .git: loose и packed объекты, packfiles и дельта-сжатие, индекс как дерево staging, git gc и ускорение хранилища.
- Объектная модель Git: blob, tree, commit
8 Перезапись истории
- Интерактивный rebase: squash, fixup, reword, drop
Глубокий разбор git rebase -i: todo-лист, склейка коммитов squash и fixup, переименование reword, удаление drop, разбиение коммита и золотое правило.
- reset вглубь: soft, mixed, hard и чем отличается от revert
Модель трёх деревьев Git: HEAD, индекс и рабочая директория. Чем отличаются soft, mixed и hard reset, когда какой применять и reset vs revert vs restore.
- amend и autosquash: аккуратная история
git commit --amend для последнего коммита и связка --fixup с rebase --autosquash для адресной правки старых коммитов без ручного интерактивного rebase.
- Очистка истории: удалить файл/секрет, filter-repo
Как убрать большой файл или утёкший секрет из всей истории Git с помощью git filter-repo и BFG, и почему важен force-push с --force-with-lease.
- Интерактивный rebase: squash, fixup, reword, drop
9 Рабочие процессы команды
- Стратегии ветвления: Git Flow, GitHub Flow, trunk-based
Сравнение Git Flow, GitHub Flow и trunk-based development: release, hotfix и feature-ветки, плюсы и минусы, когда какую модель ветвления выбирать.
- Конвенция коммитов и семантическое версионирование
Conventional Commits (feat, fix, BREAKING CHANGE) и их связь с semver MAJOR.MINOR.PATCH: как из сообщений коммитов автоматически считать версию и генерировать changelog.
- Код-ревью и защита веток
Pull Request как процесс ревью: required reviews, branch protection, CODEOWNERS, status checks и draft PR — как защитить основную ветку и наладить качественное код-ревью.
- rebase или merge: стратегии истории команды
Линейная против ветвистой истории Git: merge-, squash- и rebase-слияние Pull Request, история в монорепо и практические правила, когда какую стратегию выбирать.
- Стратегии ветвления: Git Flow, GitHub Flow, trunk-based
10 Мощные инструменты Git
- git bisect: поиск сломавшего коммита бинарным поиском
git bisect находит сломавший коммит бинарным поиском за log2(N) шагов: start/good/bad, автоматизация через bisect run и код 125 для пропуска ревизий.
- git worktree: несколько веток одновременно
git worktree держит несколько веток репозитория в разных папках без stash и второго clone: add, list, remove, prune и общая база объектов под капотом.
- Подмодули и subtree: вложенные репозитории
Submodule как ссылка на коммит против subtree со слитой историей: add/update/init, --squash, плюсы и минусы и типичные грабли вложенных репозиториев.
- Хуки и подписи коммитов
Git-хуки pre-commit и pre-push для автопроверок, GPG/SSH-подпись коммитов и тегов, плашка Verified и археология истории через blame и log -S.
- git bisect: поиск сломавшего коммита бинарным поиском