We are working using Agile methodoly and we need to deploy our code into three environments (DEV / UAT / PROD). Only Features validated in UAT can go in production at the end of a sprint.
To do so, we are currently using 3 branches: master (which goes to PROD), release (which is not deployed or only in QA env' to validate the package) and pre-release (which is deployed in UAT). 'release' is a fork of 'master', and 'pre-release' is a fork of 'release'.
Branching: Master --> release --> Pre-release
Development: release --> Feature Branch 1-X
Deployment: feature branches --> dev environments pre-release --> UAT env for validation release --> staging master --> production
Once a dev is starting to work on a user story, he is creating a feature branch, based on 'release', and once the dev is done, a pull request to pre-release is created. After this step, we only want to have in 'release' validated feature by the Testing team, so once the feature is validated a Pull Request is created from the Feature branch to the 'release' and at the end of the sprint a PR is created from 'release' to 'master' in order to be deployed in production.
Is this behavior logical? Currently we are having huged conflits on PR from Feature Branch to pre-release. Is it normal or do we need to do something else?
What is the best approach?