Imagine you are working on a Secret Project of World Domination. There are three masterminds on this conspiracy:
- The Genius
- The General
- The Computer Hacker
And they all agree to come to their secret base in 1 week each one with 1 detailed plan.
The computer hacker, being a pragmatic programmer, suggested that they use Git to store all the files of the plans. Each one will fork the initial project repo and they will merge all in one week.
They all agree and in the following days the story goes like this:
The Genius
He made a total of 70 commits, 10 each day.
The General
He spy the repo of their comrades and made an strategy to beat them. He made 3 commits, all the last day.
The Computer Hacker
This pragmatic programmer used branches. He made 4 different plans, each one on a branch. Each branch was rebased to be just one commit.
Seven days passed and the group meet again to merge all the plans into one master piece. All of them were eager to start so all of them tried to merge all the stuff on his own.
Here goes the story:
The Genius
He merged all the changes from the General's repo and then the Computer Hacker's one. And then, being a logic lover, he gave a look at the log. He expected to see a logical evolution of an idea, where the things were constructed upon the previous ideas-commits.
But what the logs shown, was a myriad of commits of different ideas all mixed in the time line. One reader could not really understand the evolution, the reasoning of the commits just by reading the commits time line.
So he ended with a mess, that even a genius could't understand.
The General
The General thought: Divide and conquer!
And so he merged the repo of the Genius on his repo. He looked at the log and saw a bunch of commits from the Genius idea, which followed an understable progression, until the last day. The last day the ideas of the General and the Genius were mixed.
He was spying the The computer Hacker and knew about the Rebase solution. So he did a rebase of the his own idea and try the merge again.
Now the log showed a logical progression every day.
The Computer Hacker
This pragmatic programmer created a integration branch for the Genius idea, another one for the General idea and another one for his own ideas. He did a rebase to each branch. And then he merged all in master.
And all of his team mates saw that his log was great. It was simple. It was understable at first sight.
If an idea introduced a problem, it was clear in which commit was introduced, for there was just one.
They ended conquering all the world and they vanished the use of Subversion.
And all were happy.