Our (Team Hashnode) convention is quite similar to the one j mentioned.
We have two branches master and development; no direct modifications are made to these.
Side note: as soon as something is merged into
developmentall the changes are automatically deployed to a staging server, and are available to be tested, before they are pushed tomaster.
We generally branch out from the latest development branch; and branches are named in this pattern: <author>/<branch-type>/<branch-name>
Here are a few (recent) examples:
somu/perf/code-splittingalkshendra/feature/response-share-promptsai/misc/editor-experimentsJitendra, <author> is for maintaining a point-of-contact context, if we ever run into any roadblock with that particular branch.
Also, if you ever want to switch to a branch of an author, you don't need to remember the exact branch name, you can just find it from a list, like so: git branch --list 'sid/feature/*'. And when you know that this feature has something to do, say with the feed, you can zero in on the result even more quickly: git branch --list 'sid/feature/*-feed'
This is especially helpful when you have a long list of branches.