Процесс разработки: ветка demo, rebase и два pull request
Схема с промежуточной веткой demo: фичи льются в неё, тестируются, и только потом уходят в main. Плюс правила оформления коммитов и разница между rebase и merge.
miki/protsess-razrabotki-vetka-demo-rebase-i-dva-pull-request · v2
Схема с промежуточной веткой demo: фичи льются в неё, тестируются, и только потом уходят в main. Плюс правила оформления коммитов и разница между rebase и merge.
В простой схеме фичи льются сразу в main. Пока разработчик один, это работает. Как только появляется необходимость проверить несколько фич вместе до выкатки, нужна промежуточная ветка.
Здесь она называется demo. В других проектах встретишь develop, development или staging — суть одна.
Главное отличие от простой схемы: два pull request вместо одного, и ветка ответвляется от demo, а не от main.
Полная форма сообщения выглядит так:
Пять правил:
- Тип —
feat,fix,docs,style,refactor,test,chore. - Повелительное наклонение — «добавь», а не «добавил».
- Описывай ЧТО сделано, а не КАК.
- Первая строка до 50 символов.
- Подробности — после пустой строки.
Примеры по-русски:
Примеры по-английски:
Язык выбирает команда — важно только, чтобы в одном проекте он был один.
Скобки после типа — это область изменения (scope). Одно слово: какой части проекта касается коммит.
Прочитав такую строку, ты понимаешь куда смотреть, ещё не открыв диф. Без области — «fix: исправлен баг» — приходится лезть в коммит, чтобы понять, о чём он вообще.
Правила для области:
| Правило | Как | Как не надо |
|---|---|---|
| Одно слово, строчными | fix(auth) | fix(Модуль Авторизации) |
| Часть системы, а не файл | fix(cache) | fix(redis_client.py) |
| Из устоявшегося набора | api, ui, db, auth, deps | каждый раз новое слово |
| Не дублирует тип | feat(cart) | feat(feature) |
Набор областей у проекта конечный: обычно 5–15 штук. Их стоит один раз выписать в CONTRIBUTING.md и дальше выбирать из списка, а не сочинять на ходу. Иначе через полгода в истории будет auth, authorization, authz и users-auth — и польза от области пропадёт.
Область необязательна. Если изменение общее и не привязано к части системы — пиши без скобок: chore: обновлены зависимости. Пустые скобки fix(): ... — ошибка, так не пишут.
Ломающее изменение помечается восклицательным знаком после скобок:
Это сигнал: у того, кто пользуется твоим кодом, после обновления что-то сломается.
Цикл
Ключевое: ветка создаётся от demo, а не от main. Ответвишься от main — получишь конфликты со всем, что уже влили в demo до тебя.
git switch demo && git pull origin demo- Ветка создана от demo, а не от main
- Имя ветки с префиксом и описывает задачу
Перед git add . всегда смотри git status — точка забирает всё, включая то, что ты не собирался коммитить.
git status- Сообщение начинается с типа
- Область в скобках указана и взята из принятого набора
- Первая строка короче 50 символов
Что делает rebase: берёт твои коммиты и прикладывает их заново поверх свежего demo — как будто ты только что ответвился. История остаётся прямой, без лишнего коммита слияния.
Правило безопасности: rebase переписывает историю. Делай его только со своей веткой, которую никто больше не трогает. Никогда — с demo или main.
Если что-то пошло не так: git rebase --abort.
git rebase demo- Ветка поднята над свежим demo
- Ты понимаешь, почему rebase нельзя делать с общими ветками
Дальше на GitHub жмёшь New Pull Request и внимательно выбираешь направление:
- base —
demo(КУДА льём) - compare —
feature/your-name-of-feature(ОТКУДА льём)
Затем описание и ревьюеры.
Если перепутать base и compare местами, PR предложит влить demo в твою ветку — то есть наоборот.
git push origin feature/your-name-of-feature- base = demo, compare = твоя ветка
- В описании понятно, что и зачем сделано
- Добавлены ревьюеры
После мержа фича живёт в demo рядом с чужими. Это тот самый момент, ради которого вся схема и затевалась.
- Фича проверена на demo вместе с остальными
Когда на demo всё сошлось, создаётся второй pull request:
- base —
main - compare —
demo
В описании перечисляются все изменения, которые уйдут в прод. Дальше — подтверждение от тимлида.
Этот PR делает не автор фичи, а тот, кто выпускает релиз.
- base = main, compare = demo
- В описании перечислены все изменения релиза
- Есть подтверждение ответственного
| Ситуация | Схема |
|---|---|
| Один разработчик, выкатываешь когда готово | feature/ → main, один PR |
| Несколько разработчиков, нужно проверять фичи вместе | feature/ → demo → main |
| Есть отдельный стенд для тестирования | точно с demo |
Не бери сложную схему на вырост. Два PR на каждую правку в одиночном проекте — это ритуал, а не польза. Перейти от простой схемы к этой легко, обратно — тоже.
