Branching allows developers to isolate code and work independently without disturbing the main development line.
A Branch is a copy of the project taken at a specific point in time, for example when preparing a new release for promotion to another environment. The copy can be taken from the main development line, from another Branch or from a Tag. A Branch is editable and can therefore "fork" from the original source. In this situation, reconciliation between the original source (branch or main) and the forked Branch must be done manually.
Merging allows developers to join two or more development branches and their corresponding commit histories together. For more information on the concept of Git merging, see the git-merge documentation.
Tagging allows developers to mark a particular revision as important in the development process. Tags also allow you to fix errors on the exact same version as the one used to deploy the Jobs during the previous development phases.
A Tag is similar to a Branch, but is a read-only snapshot of a Main or Branch. Once created it cannot be edited in any way. However it is possible to create a new Branch (which is editable) from a Tag.
Development teams are expected to define the workflow they want to use.
For more information on Git flows, see this GitHub visual tutorial.