Feature branches

Starting, publishing and finishing a feature, on the branch names GitFlow expects.

GitFlow is a convention about branch names and where work is merged. Innesta runs the parts of it that have a lifecycle: features, releases and hotfixes.

Setting it up

GitFlow is configured per repository. Initialising it stores your production and integration branches — by default main and develop — writes the standard feature/, release/, hotfix/ and support/ prefixes, and creates the integration branch if it does not exist yet.

The settings live in the repository’s own Git config. A repository that already has GitFlow configured — by another tool, or by hand — is detected rather than reconfigured.

support/ is stored for compatibility with the convention. Innesta has no dedicated workflow for it.

Where the actions are

GitFlow in the toolbar opens a popover. Its top half is Start Branch: a Feature / Release / Hotfix picker, a field for the name, and one Start button that does whichever of the three is picked. Its bottom half appears only once you are on a flow branch, and carries what can be done to that branch.

Each of them then asks to be confirmed, and it is the confirmation that spells the action out in full — Start Feature, Publish Feature, Pull Feature.

Where a branch starts

Every Start confirmation carries a Starting Point picker, and names the branch it will cut from in its own question. First in the list, marked as the default, is the configured branch — integration for a feature or a release, production for a hotfix — and under it the repository’s other local branches, in name order.

Choosing another one changes only the commit the new branch starts at, and the sheet warns that you have left the configured branch. Version suggestions, the manifest, the collision checks and the branches a finish merges into all go on using the configured pair.

A feature, start to finish

Start Feature creates feature/<name> from the integration branch — or from the Starting Point you chose — and switches to it.

Publish pushes it with -u, so it has an upstream and the pull and push buttons can count.

Pull fetches and brings in the remote copy of the current feature, through the same safe pull path as anything else.

The finish button is named for the branch you are on — Finish Feature — and it switches to the integration branch, merges the feature with --no-ff, and then tries to delete the local feature branch.

--no-ff is deliberate: it makes a merge commit even when a fast-forward would have been possible, so the integration branch’s history records that a feature existed. Without it, a feature merged the day it was branched vanishes into the line.

What blocks a finish

Finishing validates first, and refuses when:

  • a merge is in progress;
  • there are conflicts;
  • there are changes to tracked files;
  • there are commits you have not pushed.

Untracked files do not block it. And the validation checks the state of the repository — it does not simulate the merge, so a finish that passes validation can still conflict.

The status header

The GitFlow section says whether the repository is configured, which branches are the production and integration pair, which branch you are on, and — when it is a flow branch — whether it is a feature, a release or a hotfix.