In Humanitec, a Deployment always encompasses the entire App (i.e., all Workloads and all External Resources within a specific Environment). A Deployment Set holds all the non-environment-specific Configuration. Thus, a Deployment Set can be deployed to different Environments without having to update the Configuration.
Also, check this section to learn how versioning of Deployment Sets works in Humanitec.
Let's assume an App with a Workload that has a dependency on a PostgreSQL database. The Deployment Set will just contain the information that the Workload depends on a PostgreSQL database. It does not contain the environment-specific information of which exact PostgreSQL database the Workload should access. Environment-specific values are referenced via "Variable Expansions" which are resolved at deployment time. In Humanitec, the environment-specific configuration is managed via Static or Dynamic Resources.
All Deployments across each Environment of an App are recorded. Humanitec tracks the User who initiated the Deployment, the time of the Deployment, and an optional comment alongside the full Deployment Set of what was deployed. This provides a complete audit log of what happened in an Environment. Humanitec also allows developers to see the differences between any two Deployments much in the way a developer could generate a diff between two commits in git.