I may be wrong here, but isn't it the case that if you have a component selected for upload in a change set and you alter that component, you would have to delete the component from the change set and re-add it to have the latest version? Or, does the change set pull the component's configuration at time of upload?
No, the "contents" of the elements in a change set will reflect the most recent version of the file until it is "uploaded". That is, if you add an Apex Class to a change set, change the class and then upload the change set, the modified version will be deployed. You can see exactly what is in the changeset files by clicking the name to "view" the file, you will see it reflects the current state of the file.
Once you click upload, you will "lock" the files down in that change set, so if you come back to an org after an attempted deployment, change a file and then re-upload the changeset, it will be exactly the same change set (that is why we love the clone button!)
I imagine the "upload" button to be a kind of zipping process that encapsulates the set of files at that moment in time.
Simon is correct. This is something that has been bothering me as I need to frequently push certain metadata into a staging org. If that is your case too I'd recommend Copado Deployer. https://appexchange.salesforce.com/listingDetail?listingId=a0N3000000B3dgGEAR
I thought it worked like Simon described, but it didn't for a recent small page layout change I made today.
After testing a deployment which included a certain page layout, I found that I missed marking one field on a page layout as required on the page layout (not at the field level). So I made the field required on the page layout in the source system, cloned the change set which already had the page layout listed, and deployed it. I checked both Classic and Lightning on the destination org and found that the page layout was not updated even after multiple refreshes.
I searched Google for an answer and found Pruthvi Raj's suggestion to remove and then add the page layout to a cloned change set. That fixed the problem.