A Bumpy Introduction to Git Collaboration

I just finished my first group project and I learned a ton. Our biggest challenge was actually collaborating on Git. We started out with a reasonable approach: frequently merging feature branches into the development branch, then less frequently merging development into master. We had some confusion about whether we should have feature branches or branches with our names on them, but everything was pretty much working.

Then one of us decided to create a new clean branch that only he could commit to, and review, then manually merge in other's changes. So he had to keep track of what everybody else's changes were, then go get them and work them into this super branch.

Of course, we soon decided that this branch, too, was beyond saving, so we made another super branch. Then another, then another. Remembering which branch was currently the de facto master was getting to be a big job. Finally, we realized it was completely out of hand and decided to rationalize our branching model. 

We resuscitated the long-forgotten development and master branches, and started seeing that merging changes into development and master was actually much less painful than scattering changes throughout our many branches and manually integrating them.

Getting our branches into a reasonable state was pretty rough, but I'm actually glad to have gone through this experience. Now I really understand the need for a consistent, clear branching model.