Branches are an important, but either misused or underused, part of any version control system. They provide a way to maintain a snapshot of a code base at a point in time that you can roll back to whenever needed. This is especially useful when regression bugs pop up. But they also have a significant downside — merging. Merging is the worst. By which I mean it's time consuming, difficult, and expensive. The key to implementing a manageable and useful branching strategy is to understand...