With several long-term features, a model might look like this:
o-----o bugfix
/ \
o--o--o------o------o develop branch
\ \ \
o-o----o---o--o long-term feature 1
\ \ \ \
o--o-o-o-o--o--o feature 2
Basically, you have a development branch and merge corrections with your development branch. The long-term branch of functions is the basis of the development branch, and you update it by merging new changes with this development branch.
Similarly, you have a function branch for reature 2 based on function 1, and you update it by merging a new branch of a new function.
When function 1 is complete, you combine it for development and update function 2 from the development branch:
o-----o bugfix
/ \
o--o--o------o------o---o---o develop branch w/ feature 1
\ \ \ / \
o-o----o---o--o \
\ \ \ \ \
o--o-o-o-o--o--o--o-o feature 2
source
share