I don't quite understand why people don't keep it simple. Use short lived branches, and merge to master. Need to do a release? Master is your release. Tag the release when it's ready. Need to make a hot fix onto the current deployed version? Create a release branch from the tag, and then create a new tag and merge back to master.
This combined with semver gets you far. I've yet to find any downsides with this approach.
This combined with semver gets you far. I've yet to find any downsides with this approach.