Version control has more information available when it resolves conflicts: it has not only your version and the other guy's version but also the common ancestor, and thus it can do a three-way merge. Here, the common ancestor is the original version of the configuration file in the distribution, or the official version that you last merged with your changes.
Unfortunately neither Ubuntu nor any other major distribution I know of makes it completely seamless to do three-way merges when a configuration file is updated. You can get close, however, with etckeeper. Etckeeper is an add-on for APT, the package management tool used by Debian and derivatives, that manages /etc
in a version control system (Bazaar, Darcs, Git, Mercurial); it's been ported to other systems, including Yum in Fedora. I recommend using etckeeper; it's also a great way of keeping track of the changes you make in /etc
.
Some programs manage their configuration files with ucf, but that's not something you have control of as a user.
More generally, when you have the ancestor and two versions, you can do a three-way merge with the merge
utility shipped with RCS or with diff3 -m
from diffutils.
There are also a great many interactive diff and merge programs. Emacs and Vim have interfaces for that, as do most diff viewers.