mutistage deployment question...


I apologize that I'm posting this here as it probably belongs in a git
group, but I figured this was a very standard Rails concern so here

I'm wondering what people do as best practices for when you have a
multi-staging environment and you have a feature that needs to "hop
over" the current test/stage environment?

Case in point. Let's say you have branch "master" as your main
repository branch. You have "staging" as your staging/testing branch.
And you have "production" as your live server branch. All are set up
as local branches and remote branches (with remote tracking).

So, let's say I work on a new feature (call it NewFeature) in a
branch, get it working, then merge (rebase?) it with "staging". Then
deploy the staging branch to the staging server for the test team to
test it.

Meanwhile, while that is happening, a critical bugfix comes in. So you
create that on a branch (call it BugFix), get it fixed, and then you
want to stage it for testing and then roll it out to production. But,
NewFeature is already on staging and it's not ready to roll out. I.e.
the BugFix needs to "leap over" NewFeature.

So what is the best way to handle this? Roll the staging branch back
to pre-NewFeature then merge the BugFix branch so that staging is pre-
NewFeature + BugFix? and then would you just merge (rebase? still
trying to understand the difference) Production + BugFix?

We currently lock deployment to the branches, meaning: deploying to
the staging server will pull from the staging branch only. And
likewise from production. Thus, I can't just merge BugFix +
Production, deploy to staging, then if all is well, deploy to
production. Perhaps this isn't the best setup?