И эта методология подойдёт большинству проектов и команд.
Две специальных ветки
master — продакшн, то что видят пользователи. develop — стейджинг, то что проходит тесты перед релизом.Под каждую задачу — отдельная ветка
feat/user_avatar_upload-APP-42
fix/login_crash_on_ios-APP-43
Формат:
(feat|fix)/snake_case_описание-ЗАДАЧА-НОМЕР. Только английский, только lowercase. Привязка к задаче обязательна — через полгода будет понятно, зачем вообще это менялось.PR и code review
Фичи и фиксы вливаем в
develop через PR. PR проходит code review и вливается в режиме squash and merge — все коммиты ветки схлопываются в один.Почему squash: история
develop остаётся чистой. Один PR — один коммит. Не нужно читать «wip», «fix», «fix2», «наконец работает».Из develop в master
Когда
develop протестирован — вливаем в master прямым merge, без squash. Нужно сохранить все коммиты из develop в истории master, чтобы истории веток не расходились.Актуализация ветки перед PR — rebase
Пока пишете фичу, в
develop вливаются другие PR. Перед созданием PR актуализируйте свою ветку:bash
git fetch origin
git rebase origin/develop
Rebase переносит ваши коммиты поверх актуального
develop по одному. В отличие от merge — не добавляет лишний merge-коммит, история остаётся линейной. Но если ветки сильно разошлись, конфликты будут на каждом коммите — это больно.Главное правило: актуализируйте ветку часто. Синхронизируетесь раз в день — rebase пройдёт незаметно. Ждёте неделю — готовьтесь к боли.
После rebase нужен force push:
git push --force-with-lease
Именно
--force-with-lease, не --force — защитит если кто-то успел запушить в ту же ветку.Если конфликты — решаете, затем:
git add .
git rebase --continue
Если что-то пошло не так:
git rebase --abort
Именование коммитов
feat: user avatar upload #APP-42 ✓
fix: login crash on ios #APP-43 ✓
added new feature ✗
fix2 ✗
Формат:
(feat|fix): краткое описание #ЗАДАЧА-НОМЕР. Заголовок PR становится сообщением squash-коммита — он должен быть понятным.Это не весь git и не единственно верный подход. Это база, которая работает в команде и не создаёт боли при поддержке проекта.
ПС - в любой непонятной ситуации
git status