As you know from the Drupal basics, every site consists of the Drupal code base, files and data. Each of these are migrated differently.
Drupal Code Base
The code base is checked into version control system. Anytime the code base is checked in it's automatically deployed to development. The code base is migrated to staging or production via UCSF change control on every day that proceeds another workday (Monday to Thursday most weeks).
Drupal Uploaded Files
In Drupal parlance, files usually refers to uploaded images and other non-code type of files (word docs, PDFs, etc). The files are usually uploaded to via the Drupal CMS. When migrating a new site to staging and production, or on very special occasions with currently production sites these files can be moved into the staging and production environment via SFTP. Files are rarely moved from development once a site is launched. Files uploaded to the site could overwrite the current files on production.
The database is also usually handled via the Drupal CMS. When migrating a new site to staging and production the database may be migrated to staging and production, this is almost never done with a production site because production data would be over written.
How it All Fits Together:
Below is a representation of the production workflow. You never want to replace the production database and file system with the one from development. This is because migration to production from stage or development would erase all the site's production data. This problem extends to the uploaded files as well.
Staging/Testing is where you test the integration of new code base changes to the production data and files. Once code is checked out here it's fairly simple to move to production.