Зачем
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).
Как начать
# 1. Клон репозитория челленджа
git clone https://github.com/devitway/git-master-challenge.git
cd git-master-challenge
# 2. Скрипты исполняемыми
chmod +x *.sh
# 3. Создать сломанный репо
./setup-challenge.sh
# 4. Войти в него
cd broken-enterprise-repo
# 5. Оценить текущее состояние
git status
git log --oneline -10
git branch -a
Каждый раз, когда думаете, что одну проблему починили — из корня git-master-challenge/:
./check-fixes.sh
Скрипт пробегает все 10 проверок и печатает, что зачтено, а что нет.
Требования к окружению
git --version # 2.25+
bash --version # 4.0+
node --version # нужен для теста bisect (P7)
Git LFS и GitHub CLI — не нужны. Всё решается стандартным git + bash + node.
На что смотреть по ходу
- Один коммит — одна проблема. Не чините пятью сразу — потом не восстановите цепочку мысли, и код-ревью превратится в ад.
git statusпосле каждой операции. Особенно в середине rebase или bisect: легко забыть, где вы, и сделатьcommit, когда нужноrebase --continue.- Reflog — ваша страховка. Если что-то пошло не так,
git reflogпокажет все HEAD-позиции за последние 90 дней. Восстановить почти всегда можно (урок 2). - Не используйте
--forceпо умолчанию. Если алгоритм требует force — в 90% случаев вы не дописали операцию: либо не сделали--continue, либо неadd‘нули разрешённые конфликты. Притормозите.
Что это даёт
Не баллы, не «сертификат Git Master». Вы увидите, как накапливается git-долг в реальной команде, и выработаете рефлексы: какой инструмент применить в какой ситуации, где остановиться и не усугубить, где безопасно отступить через reset --hard ORIG_HEAD.
После Challenge 10-секундные git-ситуации перестают быть 10-секундными:
- «нужно перенести один коммит» — рука сама тянется к
cherry-pick, не к «перепишу заново» - «надо параллельно фичу и хотфикс» — рука к
worktree add, не кstashс риском потерять его среди 20 других - «регрессия появилась за последние две недели» —
git bi HEAD~100 ./test.shпротив «давайте перебирать руками»
Что дальше
- Ваши заметки по решениям — файл
SOLUTIONS.mdв своём форке репозитория. Через полгода вы вернётесь и обнаружите, что те же проблемы всплывают в других проектах. Личный справочник обгоняет любой общий курс. - Системно с нуля → «Курс молодого бойца» DevIT Academy — git в контексте Linux, Docker, Kubernetes и CI/CD, как рабочий поток, а не набор команд.
- Обратная связь — если нашли косяки в условии или
check-fixes.shдаёт ложный позитив, issue на GitHub или письмо в @DevITWay.
Серия целиком
- День 0: SSH — ключи, агент, config
- День 1: три состояния + чистые коммиты
- День 2: reset, reflog, восстановление
- День 3: ветки и merge — ff vs –no-ff
- День 4: rebase vs merge — когда переписывать
- День 5: hooks — pre-commit, commit-msg, core.hooksPath
- День 6: bisect — бинарный поиск регрессии
- День 7: cherry-pick + rerere — точечный перенос и память о конфликтах
- День 8: worktree — параллельная работа
- Challenge — вы здесь.