Please stop recommending Gitflow
The approach that has worked best for me is pretty simple.<p>Master should always be in a deployable state.<p>Any commit that lands on master must include unit tests that demonstrate that it works (or at least doesn&#x27;t break anything).<p>Incomplete features that will take more than a week or so to develop should be merged to master early protected by feature flags. This avoids long running branches.<p>I like squash commits: build a feature iteratively in a branch + pull requests, squash to master once it has the tests and documentation bundled together with the implementation. This gives you linear history.<p>People who prefer to review smaller commits can do so in the pull request - it&#x27;s only the finished item that gets squashed into a larger commit.