A merge commit is just like another commit, the state of your repository at a given point in time plus the history it evolved from.
The one thing special about a merge commit is that it has at least two predecessors, therefore a plain vanilla diff doesn’t make sense, you can only compare the merge with one of the predecessor, which yields the changes from the other parent(s)
To avoid merge commits, you can rebase your changes before pushing them to a remote repository.