Core patching and version controlling across multiple versions of the same site
Drupal has a good guide for this. A general summary for updating would be:


Delete everything except sites
Unpack the latest Drupal in the same place
Run the updater via update.php. 
Check for breakage. 
Update modules if necessary. They'll most likely be outdated too.


When all is good, commit all the updated code. Ideally you'd have separate commits for the core update, and for each module you updated. Then push up your code to your remote repo.

Now over to your environments, you simply do a git pull. If your remote repo is the filesystem of the remote environment (i.e. Acquia, Pantheon), then pulling isn't required. Set the site to maintenance mode, and run the updater. Ideally, you'll have this automated. If you use Drush, then it's just the following commands:

drush vset maintenance_mode 1 # enable maintenance mode
git pull                      # pull in the latest code
drush updb                    # perform updates
drush vset maintenance_mode 0 # disable maintenance mode