By default, S3 does not store multiple versions of an object. If you upload a file to a key that already contains an object, the old object is overwritten.
Bucket versioning is an optional feature where the bucket stores multiple versions of an object. It helps:
On that last point, I recommend primarily using object versions for "just-in-case" purposes, not for expected day-to-day versioning. If you have an application that stores multiple versions of the "same" object, I would probably store them in different keys entirely. If I write a bug, I don't want to screw up my "user's versions"... I prefer my infrastructure-level backups to only be used for disaster recovery.
aws s3api list-object-versions --bucket BUCKET --prefix bootsimg.png --no-cli-pager
Replace BUCKET with your bucket name.
aws s3api list-object-versions --bucket BUCKET --prefix bootsimg.png --no-cli-pager > /tmp/versions.json
Run and submit the CLI tests.
If you're interested, go delete the latest version using the web console. You should be able to see the old version again when visiting the public URL! Very handy for rolling back changes.