Most people pass their code to a CI system after it's been pushed. Run your unit tests locally, push your code, run it through your CI system (integration and unit tests, anything else), then push goldbits to production.
Yes, but on a different branch. CI runs tests then merges to master (or whatever branch triggers deployment) and pushes.