Warning
The win32text extension can cause trouble with hunk selection. This has been resolved in Mercurial 1.3 and TortoiseHg 0.8, but requires proper configuration. See issue #82.
The purpose of this dialog is to allow the user to shelve selected changes from the working directory, store them in a special patch file within the repository, and then unshelve them back at a later time.
Shelve dialog
Walking across the toolbar buttons:
- Shelve
- Shelve selected diffs in checked files.
- Unshelve
- Replace the shelved changes back into the working directory.
- Diff
- Visual diff checked files
- Revert
- Revert checked files to last revisioned state. If merging, it allows you to select the revert parent.
- Add
- Add checked files that were in unknown ‘?’ or ignored ‘I’ state.
- Move
- Move checked files to specified target directory in versioned manner.
- Remove
- Delete checked unversioned files and/or remove (mark as deleted) any versioned files.
- Forget
- Forget checked versioned files
- Refresh
- Reload the state of the working directory. It tries to retain check and selection state across refresh.
The file list has four columns:
- A checkbox that indicates whether the file is selected for an operation. The toolbar buttons only operate on checked files. “Partially” selected files have a special check state. This column header is checkable, it will toggle the file selection states.
- The st column holds the status of the file, defined by Mercurial’s status command, one of ‘MARD?IC’.
- The ms column holds the merge state of the file, defined by Mercurial’s resolve command, one of ‘ RU’.
- The canonical path of the file (relative to the repository root)
Below the file list are checkboxes that toggle the display of the various classes of files {modified, added, removed, deleted, unknown, clean, ignored}. These check boxes will be disabled if the commit tool was given a specific set of files and/or directories.
Just like the commit tool, this dialog uses TortoiseHg’s integrated hunk selection code to allow the user to select the files and change hunks to move to the shelf. When you press the shelve button, the selected changes are removed from the working directory and placed in a patch file. If the shelf already had changes in it, you will be asked whether to replace those changes or to merge these new changes into it. When the shelf has changes, the unshelve button will be active.
When the unshelve button is pressed, the shelved changes are reapplied to the working directory.
Note
The unshelved changes will appear as working directory modifications when the shelve tool refreshes it’s view of the repository.
Shelved changes are physically removed from the working directory until you unshelve them. This means you can build your project and run tests on it while the shelved changes are gone. This is safer than selecting changes at build time since you can test whether the change being committed is valid.
Shelving changes is also useful for removing partially completed work to make sure it doesn’t interfere with the debugging of other changes you are making.
Caveat: the shelved changes are stored in a patch that is based on the current working directory contents. There’s no guarantee that the patch can be cleanly reapplied later if the shelved changes conflict with changes made to your code after the shelving.
The shelf can be considered a single unnamed MQ patch that is never converted into a changeset.
The shelve tool can be useful when maintaining a patch queue. The shelf can take changes from one patch and re-apply them to another patch (or an entirely new patch).
The attic extension is a super-set of the shelve feature. In particular, attic allows you to have several named shelves which can be saved and restored independently.
The shelve tool can be started from command line:
hgtk shelve
aliases: unshelve
shelve/unshelve tool
use "hgtk -v help shelve" to show global options