This command merges the specified <branchname> into the current branch, but instead of performing a fast-forward merge, which could potentially lose the branching history, it creates a new commit object, thereby preserving the history of independent lines of development.
The --no-ff flag prevents the 'fast forward' behavior.
It's worth mentioning that --no-ff is the long version of the -n flag. Also, if you need to resolve a merge conflict, you can use the -X flag followed by the appropriate strategy such as ours, theirs or ignore-all-space.