Currently, we don’t have any long-living branches.
We create a branch to make a change, test it, and then merge it back to master. From there it goes to QA, STG, PROD.
Today, if multiple people make different changes and commit to master from their branches, if one of those changes is not ready to be promoted to the higher environment (usually PROD), we then on PROD deployment day manually revert that not-ready change from a repo, deploy rest to PROD from master and then put the not-ready change back again into master. Clunky and higher chance of error.
Is there any better way to organize the repositories?