First of all, not making merge conflicts or reducing the size of them are the best way. So don't make 'long-running branches' which is very apart from the master branch.
Our team frequently rebase the feature branch to the master branch.
In the recent article from the React team, they explained 'feature flag' approach against 'long-running branches'.
Additionally, the latest atom has great GUI to show and resolve merge conflicts. I believe there's similar features in other editors, too. For the complex merge conflict, however, direct communication with other developers is much important than a tool.