To me, fundamental difference is that git merge keeps the history while git rebase rewrites it. It all boils down to the question whether you want to rewrite history or not. I'm usually against it, but I use rebase extensively on local branches or when I'm 100% certain that I'm the only one working on the branch. In other cases, I use merge even if sometimes it feels like it creates too many noise.