This article exposes some of my concerns about the different integration strategies available in Git. Summarizing the Git theory which you may already know, the three most common integration strategies are merge, rebase and squash. I’ve used each strategy on different occasions, and while I’m not keen on a particular one, I like rebase the least.
I’m not going to try to convince anyone because everyone will have their preferences, plus part of engineering is knowing when to use the best approach and knowing that there is not a hammer for all the nails. But the purpose of a VCS should still be to make easy to track and understand changes in the codebase, and to make simple to detect and fix bugs. A pretty history graph helps and is a good think, but it should be a secondary thing that never compromises the utility of having the right amount of information at your tips to do your work the best you can. Pragmatical use of Git is cool.