We have tried multiple branching strategies to adopt CI/CD.
Developers develop on the feature branch and then merging to master which get deployed to QA for testing and then master is deployed to production, so in short whatever goes out to QA/UAT goes out to production unless you put a create a PR/patch to fix the bug - Least hassle of merging, syncing etc.
Developers develop on the feature branch and then merge to master which gets deployed to QA/UAT for testing and based on the testing outcome, spin out a release branch for things which needs to be deployed to Production.
What are the recommendations in case of organizations with 50 odd devs and spread across ~8 scrum teams?
Remember, we always have feature flags to toggle the releases and features pushed out.