Git flow
Модель ветвления git-flow —
это пять правил и много бухгалтерии. Правила простые; ошибаются люди именно в
бухгалтерии, в шесть вечера в день релиза — сливают хотфикс в main и забывают
про develop, или ставят тег не на ту ветку.
⌘K → Git flow ведёт бухгалтерию за вас.

Раскладка
| Ветка | Что содержит |
|---|---|
Релизная ветка (main) |
То, что в продакшене. Каждый релиз помечается тегом здесь. |
Интеграционная ветка (develop) |
Куда накапливается готовая работа между релизами. |
feature/* |
Одна единица работы, ответвлённая от develop. |
release/* |
Стабилизируемая версия, ответвлённая от develop. |
hotfix/* |
Срочная правка, ответвлённая от main — продакшен не может ждать develop. |
Gitcito читает и пишет те же ключи git-конфига gitflow.*, что и CLI git flow
(gitflow.branch.master, gitflow.prefix.feature, …). Репозиторий, на котором
кто-то уже выполнял git flow init, распознаётся сразу, а репозиторий,
настроенный здесь, потом работает с CLI. Gitcito повсюду выполняет обычные
команды git — сам CLI ставить не нужно.
Настроить записывает эти ключи и, если интеграционной ветки ещё нет, создаёт её от релизной. Больше ничего не трогается. Любое имя или префикс можно поменять позже через Изменить раскладку.
Начало
Выберите вид, введите имя, нажмите Начать. Диалог показывает ветку, которую собирается создать, и ветку, от которой она будет создана, ещё до того, как вы на это согласитесь:
feature/search from develop
hotfix/1.0.1 from main
Имя — то, что вы напечатали; префикс приходит из раскладки.
Завершение
Завершить — та часть, которую стоит автоматизировать, потому что это несколько шагов, и произойти должны все:
| Вид | Что делает Gitcito |
|---|---|
| Фича | Сливает в develop с --no-ff, удаляет ветку, оставляет вас на develop |
| Релиз | Сливает в main, ставит тег, сливает в develop, удаляет ветку, оставляет вас на develop |
| Хотфикс | Сливает в main, ставит тег, сливает в develop, удаляет ветку, оставляет вас на main |
--no-ff здесь намеренно: именно коммит слияния делает ветку видимой в
графе после. Без него короткая фича растворяется в прямой линии, и
модель теряет то, ради чего затевалась.
Тег имеет вид <префикс тега версии><имя> — release/1.1.0 с префиксом по
умолчанию становится v1.1.0. Снимите галочку Помечать релиз тегом, чтобы
пропустить это, и напишите сообщение тега, если стандартного мало.
Что он делать отказывается
- Грязное рабочее дерево его останавливает. Сначала закоммитьте или застешьте; завершение сливает две ветки и дважды двигает HEAD, и делать это вокруг незакоммиченной работы — верный способ её потерять.
- Конфликтное слияние откатывает всё целиком. Если слияние в main прошло, а слияние в develop конфликтует, вы иначе остались бы с наполовину завершённым релизом. Gitcito возвращает каждую ветку туда, где она была, и сообщает о конфликте. Слейте эту ветку вручную, разрешите конфликт в резолвере, и дальше поток ваш — доводите его руками.
- Он никогда не пушит. Завершение локально. Отправьте main, develop и новый тег, когда будете готовы, — см. синхронизацию.
Отмена
Одна Отмена возвращает всё на место: обе ветки уходят на прежние коммиты, тег удаляется, а завершённая ветка воссоздаётся на своей старой вершине. Ровно поэтому завершение можно спокойно пробовать.
Когда этим не пользоваться
Git flow подходит софту с версионированными релизами и поддерживаемой
продакшен-веткой. Если вы деплоите из main несколько раз в день, релизные и
хотфиксные ветки — церемония, которой вы не воспользуетесь;
стеки веток или просто короткоживущие ветки от main подходят
лучше. Фичевая половина модели при этом прекрасно работает сама по себе.