I don't think the other answer above paint a clear picture with respect to the difference between git remote update and git fetch.
git remote update actually calls git fetch in background, but with specific settings. The --prune option of remote update will override any settings for fetch by explicitly passing --no-prune and checking if you have a remotes.default. Assuming you don't have the latter then the following are the same:
git remote update
# same as
git fetch --no-prune --all
git remote update --prune
# same as
git fetch --prune --all
git remote update origin upstream
# same as
git fetch --no-prune --multiple origin upstream
See the code here and man git-remote for how remotes.default influence the exact command.
This reduces the problem to "What is the difference between git pull and git fetch?" which already has an answer on stackoverflow.
git fetch originandgit remote update origin?.