Предлагается использовать следующую модель ветвления для наших проектов (изображение взято из статьи на хабре)
![Git branching](https://habrastorage.org/storage/4bf7e68c/49e29c35/3a01bd6b/782a1be3.png)
Основные концепции такого ветвления:
- почкование и слияние ветвей проходит в строго определенном направлении (откуда может забрать изменения -> название ветки -> куда может вливаться):
- null -> master -> dev, hotfixes
- master -> hotfixes -> master, release, dev
- dev -> release -> dev, master
- master, hotfix, release -> dev -> featureX, release
- dev -> featureX -> dev
- ветка master стабильна в произвольные момент времени (production-ready)
- ветка master в каждом своём коммите имеет тег, посколько любой коммит в master – это новый релиз (в master сливаются изменения только из hotfixes и release)
- ветка dev – основная ветвь разработки, в которой находятся самые свежие изменения, которые подготовлены для релиза
- при слиянии веток использовать флаг `–no-ff`, что заставит git создавать новый коммит и у нас будет дерево разработки, а не прямая
- все ветви, кроме master и dev временные, и удаляются после вливания в другую ветку
- ветки feature-* являются локальными ветками разработчика, и запись их в центральный репозиторий не желательна
Именование ветвей:
- {hotfix,release}-VERSION
- feature-NAME
Эта модель лиш предложение, и мы можем (читай должны) адаптировать её под свои нужды.