What you describe for testing and merging is a needlessly manual process. Using e.g. Phabricator, I can make a local feature branch and when I think it&#x27;s ready open a request for code review. My CI system can run tests. I can update my request in response to test failures or reviewers comments. When my code is ready, Phabricator can squash all my commits into one and rebase that onto master.<p>If for whatever reason I did want to back out this code, there&#x27;s a single commit to revert. This is unlikely though, since until a feature has proven itself in production it will be behind a feature flag.<p><a href="https:&#x2F;&#x2F;secure.phabricator.com&#x2F;book&#x2F;phabflavor&#x2F;article&#x2F;recommendations_on_branching&#x2F;" rel="nofollow">https:&#x2F;&#x2F;secure.phabricator.com&#x2F;book&#x2F;phabflavor&#x2F;article&#x2F;recom...</a>