I agree, merges are great, since you have a single commit you can pull out.
To back out a merge, you would just do another merge with a reverse diff: `git merge merge-commit..merge-commit^`
Also, it makes things like backporting much easier, since you can just pull out the merge commit and it brings in any "subcommits", rather than individually cherry-picking each commit, like you'd have to do with a fast-forward.
It also makes life so much easier on other developers that are just working in feature branches. No need to rebase. No need to squash. No need to clean up commits. We allow merging master back into your feature branch rather than rebasing, since in the end it doesn't matter (and sometimes, everything you did is interesting).