Usually people prefer not to rewrite history, since your project can
lose vital detail and information about design decisions. What I would
suggest, then, is that any changes you decide you don't want in production,
revert them. That way, you remove the
unwanted changes, but preserve the chain of events that tells you why you
made the decision to drop certain changes or features.
To use this command, run
git revert <commit>.
Once you've removed your unwanted commit from
staging into your
git checkout master
git merge staging