---
title: branching
tags: git,notes
---
Branching
===
Branching is essentially like grouping commits together, thereby allowing us to undo or revert an applied changes to a permanent branch by reverting the merge commit.
Classification of branches
---
In our usage of branching, branches are classified into two categories

:::info
:bulb: In every code repository the permament branches should be existing and created right away
:::
### Table of branches
| type | naming | branch from | merged to | delete |
| -------- | -------- | -------- | -------- | -------- |
| master | master | null | null | no |
| develop | develop | master | master | no |
| feature | feature/{name} | develop | develop | yes |
| bug | bug/{ref} | develop | develop | yes |
| release | release/v{x.y.z} | develop | develop | yes |
| hotfix | hotfix | master | master & develop | yes | yes |
**Definition:**
- **type** refers to the type of branch
- **naming** pattern of the branch
- **branch from** refers to the branch it would created from
- **merged To** refers to the branch it merges onto
- **delete** determines if must be deleted after being merged / pull requested merged
**Purpose of each branches:**
{%hackmd thRxXoyFRVOkg6jCf8wzVw %}
:::info
:bulb: Bug fixes and hot fixes are different.
- **Bug fixes** are for development issue and follows release cycle
- **Hot fixes** are for production issue and are immediately release
:::
##### Branch Protection rule
The master branch should atleast configured with either of the following protection rules:
- **Status Checks**
commits must first be pushed to another branch, then merged or pushed directly to a branch that matches this rule after status checks have passed.
- **Pull Request Review**
all commits must be made to a non-protected branch and submitted via a pull request with the required number of approving reviews and no changes requested before it can be merged into a branch
Both protection rules prevent contributors to push to remote branch directly and requires merge process to be done in order to update the branch.
:::info
:bulb: Naming pattern is useful when branch protection rule applies to a pattern
:::
:::warning
:exclamation: In every code repository a branch protection rule must be applied to master branch
If you noticed the repository has no branch protection rule, informed the lead of the project immediately to apply protection rule
:::