More often than wanted, it's necessary to stop what you were working on and work on something else. For example a serious problem needs immediate dealing with and you have to stop working on the new feature. If possible, you should commit the changes you have done so far and then start working on the urgent issue, but often those changes would break the build or are just not ready for committing yet.
So if you can't commit your local changes yet, you have to put them aside while you're working on the urgent issue. The shelving feature helps you do exactly that: you can store your local changes on a shelve, get your working copy in a clean state again and work on the issue. After you're finished with the urgent issue and you've committed those changes, you can unshelve your shelved work and continue working on your previous task again.
Two new commands are implemented for this. One for shelving and one for unshelving.
To shelve your local changes, select your working copy and use
→ The following dialog allows you to select the files you want to shelve and give a name under which you want to store them.
If you select an existing shelf, then a new version is created for that shelf. If you provide a new name, a new shelf is created for the selected files.
If you click the
button, the shelf is created and your working copy files are reset to a clean state. If you click the button, the shelf is created but your local modifications are kept.To unshelve your changes, use
→ to get the unshelve dialog. This dialog shows you a list of all shelved items. Select the shelved item you want and the version to apply back to your working copy and click .Shelves are purely a local client feature. Creating and removing Shelves will not affect the repository, nor anyone else's working copy.
The shelving feature is still marked as experimental
.
That means that while shelving works as advertised, it is still in a stage where it's heavily improved and worked on. That also means that there's no guarantee that the shelves you create are upwards compatible and future versions might not be able to use them. And of course the UI might change as well in future versions to accommodate new features and behaviors.