День 0: SSH — один ключ вместо пароля везде

Цель урока После урока вы умеете создать Ed25519 SSH-ключ, подключить его к ssh-agent с автозагрузкой, добавить публичную часть в GitHub и клонировать приватный репозиторий без паролей. Понимаете, почему один ключ работает на десятке сервисов и как через ~/.ssh/config держать рабочий и личный GitHub в одной системе. Параметр Значение Bloom Применение SFIA Уровень 2 Время 30–40 минут Артефакт Рабочий ~/.ssh/id_ed25519 + ~/.ssh/config + автозагрузка агента Проверка ssh -T git@github.com → приветствие от GitHub Теория за 3 минуты Пароль от GitHub вы вводите на клавиатуре у всех на виду — и его украдёт shoulder-surfing, phishing, случайный скриншот. SSH-ключ этот механизм убирает. ...

16 апреля 2026 · 7 минут · 1303 слова · DevOps Way

День 1: три состояния Git — где сейчас живёт ваш файл

Цель урока После урока вы понимаете, в каком из трёх состояний живёт каждый ваш файл (working / staging / committed), читаете git status как карту и используете git add -p для осознанных коммитов вместо git add .. Знаете, какой командой вернуть файл из каждого состояния. Параметр Значение Bloom Понимание, Применение SFIA Уровень 2 Время 30–40 минут Артефакт ~/.gitconfig с алиасами s, d, dc + история из 5 осознанных коммитов Проверка git status → nothing to commit, working tree clean; git log --oneline показывает коммиты в формате type(scope): message Теория за 3 минуты У файла в Git три состояния, и каждая команда — это переход между ними. ...

16 апреля 2026 · 8 минут · 1626 слов · DevOps Way

День 2: reflog и fsck — что спасает после git reset --hard, а что нет

Цель урока После урока вы умеете восстановить потерянный коммит через git reflog, восстановить staged-изменения через git fsck --lost-found и точно знаете, какие операции Git безвозвратно удаляют данные. Понимаете, как reset --hard действует на файл в каждом из трёх состояний (working / staging / committed). Параметр Значение Bloom Применение, частично Анализ SFIA Уровень 2 Время 40–60 минут Артефакт ~/.gitconfig с алиасами safe-reset, recover-staged, tree, undo Проверка Мини-тест + восстановление потерянного коммита за 2 команды Теория: что такое «потеря данных» в Git В Дне 1 вы видели три состояния — working / staging / committed. Сегодня смотрим на них под углом reset’а. ...

16 апреля 2026 · 7 минут · 1378 слов · DevOps Way

День 3: ветки и merge — fast-forward против --no-ff

Цель урока После урока вы умеете создать feature-ветку и слить её в main двумя разными способами (fast-forward и --no-ff), читаете git log --graph, понимаете разницу между тремя стратегиями merge (ff / no-ff / squash) и решаете merge-конфликт по маркерам <<<<<<< ======= >>>>>>>. Параметр Значение Bloom Применение SFIA Уровень 3 Время 40 минут Артефакт ~/.gitconfig с merge.ff = false, merge.conflictStyle = diff3, alias graph Проверка git log --graph показывает два merge-коммита с разной формой; конфликт решён Теория за 3 минуты Ветка в Git — это указатель на коммит. Не копия, не папка, не «параллельный мир». Одна строчка в файле .git/refs/heads/main с SHA. ...

16 апреля 2026 · 9 минут · 1764 слова · DevOps Way

День 4: rebase vs merge — когда переписать историю, когда сохранить

Цель урока После урока вы умеете перестроить feature-ветку поверх свежего main через git rebase, понимаете разницу между rebase и merge на уровне графа, используете rebase -i для чистки коммитов перед PR (squash / reword / drop) и знаете золотое правило: не ребейсить то, что уже запушено в публичную ветку. Параметр Значение Bloom Применение, частично Анализ SFIA Уровень 3 Время 45 минут Артефакт ~/.gitconfig с pull.rebase = true, rebase.autoStash = true, alias rb, rbi Проверка Feature-ветка успешно ребейзнута поверх main; git log --graph показывает линейную историю Теория: rebase — это не merge git merge соединяет две ветки merge-коммитом, сохраняя факт ветвления: ...

16 апреля 2026 · 11 минут · 2176 слов · DevOps Way

День 5: git hooks — как отловить мусор до коммита

Цель урока После урока вы умеете написать и установить pre-commit и commit-msg hook на чистом bash (без Husky / Node / Python), понимаете почему hooks живут локально и как распространить их на команду через core.hooksPath + папку в репозитории. Можете добавить проверку секретов, trailing whitespace, формата Conventional Commits. Параметр Значение Bloom Применение SFIA Уровень 3 Время 40 минут Артефакт repo/.githooks/pre-commit + commit-msg + core.hooksPath = .githooks Проверка Коммит с секретом блокируется; коммит с кривым сообщением блокируется; git commit --no-verify обходит (и это ожидаемо) Теория: что такое git hook Hook — это исполняемый файл в папке .git/hooks/, который Git вызывает на определённое событие. Если файл есть и имеет бит +x — Git запустит его и смотрит на exit code: 0 — продолжить операцию, не 0 — отменить. ...

16 апреля 2026 · 8 минут · 1632 слова · DevOps Way

День 6: bisect — Git находит сломавший коммит за вас

Цель урока После урока вы умеете найти коммит, внёсший регрессию, за log₂(N) шагов через git bisect; различаете bad, good, skip; умеете автоматизировать поиск через git bisect run с любым тест-скриптом. Параметр Значение Bloom Применение, Анализ SFIA Уровень 2–3 Время 30–40 минут Артефакт test-bisect.sh — тест-детектор под bisect run Проверка Мини-тест + сценарий «найди виновника за 4 шага» Теория за 3 минуты Git-история — это DAG коммитов. Каждый коммит знает, от какого родителя он произошёл. ...

16 апреля 2026 · 6 минут · 1 слово · DevOps Way

День 7: cherry-pick и rerere — перенос коммитов и память Git о конфликтах

Цель урока После урока вы умеете переносить отдельные коммиты между ветками через cherry-pick, различаете случаи, когда это уместно, и когда правильнее merge/rebase. Включили rerere глобально и понимаете, как Git запоминает ваше решение конфликта, чтобы применить его автоматически в следующий раз. Параметр Значение Bloom Применение, Анализ SFIA Уровень 2–3 Время 35–45 минут Артефакт rerere.enabled = true в ~/.gitconfig + алиас pick Проверка Мини-тест + сценарий с повторным конфликтом Теория за 3 минуты git cherry-pick <sha> берёт один коммит с одной ветки и применяет как новый коммит на текущую. Новый коммит имеет другой SHA, но тот же diff и то же сообщение. ...

16 апреля 2026 · 7 минут · 1380 слов · DevOps Way

День 8: worktree — две ветки в двух каталогах, один репозиторий

Цель урока После урока вы умеете создавать параллельные рабочие деревья через git worktree, держать в них разные ветки одновременно, убирать их и чистить мёртвые ссылки через prune. Понимаете, что объекты и refs лежат в одном .git/, а HEAD и index — своё для каждого дерева. Параметр Значение Bloom Применение, Анализ SFIA Уровень 2–3 Время 25–35 минут Артефакт Алиасы wta/wtl/wtr + конвенция ~/code/<repo>/ + <repo>-<ветка>/ Проверка Мини-тест + параллельная работа feature + hotfix без stash Теория за 3 минуты Обычный репозиторий выглядит так: один каталог my-repo/, внутри .git/ с объектами и refs, рядом ваши файлы. В каждый момент времени checked out одна ветка — это ваш HEAD. ...

16 апреля 2026 · 7 минут · 1 слово · DevOps Way

Git Mastery Challenge: сломанный репозиторий для практики

Зачем 9 уроков серии дают навыки по одному за раз в стерильных sandbox-репозиториях. В реальности проблемы наваливаются слоями: мусорная история и утекший секрет и merge-конфликт и два worktree в разных состояниях — всё одновременно. Challenge — один заранее сломанный репозиторий с 10 такими проблемами. Вы проходите его руками и проверяете прогресс автоматическим скриптом. Что внутри Репозиторий собирается скриптом setup-challenge.sh из чистого состояния и содержит: Грязная история коммитов — сообщения fix, oops, update stuff (урок 1) Потерянный коммит в reflog — кто-то сделал reset --hard, в рабочем дереве его нет (урок 2) Merge-конфликт в одном файле от трёх веток (урок 3, урок 4) Активная ребейс-цепочка, прерванная на конфликте — нужно продолжить или отменить (урок 4) API-ключ и приватный RSA в истории — нужно вычистить и подстраховаться хуком (урок 5) Серия из пяти WIP-коммитов перед merge — нужен rebase -i squash (урок 4) Регрессия в 20 коммитах — ищется bisect’ом за 5 шагов (урок 6) Коммит из чужой ветки нужен в вашей — cherry-pick с конфликтом + rerere запомнит решение (урок 7) Параллельная задача без потери WIP — решается worktree (урок 8) Старый хлам в .git/worktrees/ — осиротевшие записи, нужен worktree prune (урок 8) Задачи идут с нарастающей сложностью. P1–P6 покрывают базу (уроки 0–5), P7–P10 используют продвинутые инструменты (уроки 6–8). ...

16 апреля 2026 · 4 минуты · 658 слов · DevOps Way