With REFERENCE to
production
production -> qa [integrated testing]
qa → demo [Investors, Internal Stakeholders, etc when code freeze is done and changes are stable]
qa -> uat [regression test bed]
qa → dev [developer unit testing]
dev → staging [external integration testing, etc]
production -> hotfixhotfix -> production
features / fixes -> dev -> qa -> prod
Branches should be in sync always but can diverge tentatively in case of urgency like hot-fixes or unstable branches
