A visual storyline is shown here.
The main branch contains tested prodcution ready code, releases are tagged on main.
Each sprint has its own branch
Eeach feature (and bugfix) has its own branch.
Branching is done from the main branch to the sprint branches, after coding and testing sprint branch is merged to main.
If you are the only developer it is oke to setup one sprint branch to work on sequentially, there is no need to setup separate feature branches
Branch names clearly communicate purpose and should contain a reference to issue tracking system if relevant
Merging is preferred (merging "unless" policy)
These guidelines should not impede the handling of emergencies. Forced commits are allowed by exception only and branch(es) must be fixed at the firs available opportunity.