Reloading the contents buffer from the copy on disk is called reverting in Emacs, and you may be interested in the “Reverting” section in the manual.
If you do your version control from Emacs, it should take care of reverting on an update.
By default, Emacs checks for a file update when you make the first change after saving.
Here's a function I use when I've modified a file externally.
(defun revert-files (&rest files)
"Reload all specified files from disk.
Only files that are currently visited in some buffer are reverted.
Do not ask confirmation unless the buffer is modified."
(save-excursion
(let ((revert-without-query '("")))
(dolist (file-name files)
(message "Considering whether to revert file %s" file-name)
(let ((buf (find-buffer-visiting file-name)))
(when buf
(message "Reverting file in buffer %s" (buffer-name buf))
(set-buffer buf)
(revert-buffer t nil t)))))))
Here's a script to invoke it from a shell command (it could be invoked from a wrapper script for version control operations).
#!/bin/sh
files=
for x; do
files="$files \"`printf '%s' "$x" | sed 's/[\\\\\\\"]/\\\\&/g'`\""
done
emacsclient -e "(revert-files$files)"
Warning: I've removed some cruft from the code as I copied it, so there may be typos.