The concept of shelving was made popular by Visual Studio Team System's source control system - it allows you to "shelve" your changes for a couple reasons, like:
- You have to work on a bug fix immediately, but you are in the middle of implementing a new feature. You cannot check in those half-baked changes, only the bug fix. So you shelve your feature work. Once done with the bug fix, you unshelve the feature work and continue.
- Sharing work. Another developer needs the changes you are currently working on, but you are not yet done. So you shelve your changes and the other dev unshelves them and can get productive immediately.
- Code review. Instead of having someone come over to your office (or worse, email the files) to review the changes before checkin, you shelve them and the reviewer can unshelve them.
- Backup. How many times do you leave your workplace with a feature not yet completed? What to do with this build-breaking half-baked work? Shelve it!
Now you get the idea why shelving is pretty neat. Even Subversion does support the concept although it is not explicitly there: the blog posts Shelving in Subversion and Shelving Subversion show how you can make shelving happen with Subversion.