В модели git-flow есть две главных ветки (master и develop), а также несколько дополнительных. Рассмотрим каждую из них по отдельности.
1. Master
Здесь находится стабильный рабочий код, который готов к развертыванию на production-сервере. В данной ветке работа не ведется, и она только сливается с Release и Hotfix ветками. Master создается автоматически при создании репозитория.
2.Develop
Здесь находится весь код, который готовится к следующему релизу. Весь функционал, который касается следующих релизов, здесь находиться не должен.
3. Feature
Так называются функциональные ветки, где находится функционал, например, позадачно. Каждая функциональная ветка создается отдельно, и после выполнения задания объединяется только с веткой develop. Данный процесс автоматизирован и может быть выполнен одной командой:
git flow feature start test
В соответствии с выбранным шаблоном названия будет создана ветка feature/test.
После реализации функционала нужно объединить эту ветку с develop. Это можно сделать очень просто:
git flow feature finish test
Вышеприведенная команда объединит ветку feature/test с develop и после этого удалит ее. Функциональные ветки вообще существуют только локально, их можно также добавить и в отдаленный репозиторий если есть необходимость, чтобы над функционалом работало несколько человек одновременно. Это делается с помощью:
git flow feature publish test
Жизненный цикл функциональной ветки длится только во время реализации задачи, после этого ее можно удалить из удаленного репозитория стандартными git-инструментами.
4. Release
После того, как готовый или почти готовый функционал помещен в ветку develop, можно начинать готовить релиз. Это последняя ветка перед переносом в master. Здесь могут быть сделаны какие-то минимальные изменения в функционале или выполнены фиксы багов. Добавлять в эту ветку новый большой функционал запрещено, а все комиты нужно переносить в ветку develop. После создания ветки релиза версии v.1.0, в ветку develop уже можно заливать изменения, которые будут касаться следующего релиза (версия v.2.0, например).
Начало и окончание работы с веткой релиза происходит по аналогии с функциональными ветвями:
git flow release start v.1.0.
git flow release finish v.1.0.
5. Hotfix
Если в master ветке появился баг, который требует немедленного вмешательства, то для этого есть ветки hotfix. Команды для работы с ветками исправлений аналогичные:
git flow hotfix start
git flow hotfix finish
Данная ветка нужна для того, чтобы команда разработчиков могла продолжать работу над функционалом в ветке develop, в то время как один из программистов исправляет баг в ветке hotfix. После исправления ветка объединяется с master и develop. Хотя есть один нюанс: если на момент исправления ветка develop уже была стабильной и уже есть ветка релиза, то изменения сливаются с release вместо develop.
Git Flow - это модель, которая показывает, как можно проводить разработку в команде, используя возможности Git. Разработчики могут работать над задачами как индивидуально, так и в группах, не мешая друг другу. При этом в течение всего жизненного цикла разработки существуют только две основные ветки: master и develop, поэтому в репозитории поддерживается постоянный порядок, поскольку все другие ветки являются лишь временными. Данная модель проста и понятна, а применение расширения автоматизации, которое было описано в начале статьи, делает ее очень удобной в использовании.