Git merging combines commits from different branches into a unified history. There are implicit merges via rebasing or fast-forwarding, explicit non-fast-forward merges that create a new merge commit, and squash merges that combine all commits from one branch into a single new commit on the target branch without preserving the original commits. Fast-forwarding moves the branch pointer forward without creating a new commit, while non-fast-forward and squash merges create a new merge commit to join the histories.