There are only two hard things in Computer Science: cache invalidation and naming things. -- Phil Karlton
Typically, we have three main branches at any given time in a project lifecycle.
master, development and staging.Master is production ready code, development is actively being worked on and staging is pre-flight testing before deploying master.
Features are branched off of development and use underscores to indicate distance from originating branch. For instance
_development_users __development_users_reset_passwordindicates that __development_users_reset_password branched off of _development_users branch.
___development_users_reset_password_experiment(3 underscores away) would indicate that I was experimenting with a branch off of development users reset password branch.
This provides a nice visual hierarchy when running git branch from the command line. It's also helpful when you have multiple features being worked on by several people and you want to know where these branches are in relation to each other without needing to ask anyone. Here is a more complex example that illustrates the usefulness in using underscores in naming feature branches
__development_people_importing_csv * __development_people_importing_xml __development_users_password_reset _development_people_importing _development_users development master staging