I have the hg shelve (not attic) extension installed, and I want to drop a patch.  In git it would be git stash drop.  How do I do this using the shelve extension?
- 11,743
 - 10
 - 52
 - 81
 
- 6,208
 - 3
 - 49
 - 59
 
4 Answers
From the Mercurial shelve documentation (or using hg help shelve):
To delete specific shelved changes, use "--delete". To delete all shelved changes, use "--cleanup".
options:
-d --delete delete the named shelved change(s)
So if your patch was called my-patch, then you would delete it using:
hg shelve -d my-patch
- 1
 - 1
 
- 1,438
 - 2
 - 20
 - 37
 
If you don't want to use shelves, you can do it the following way.
hg diff > mylocalchanges.txt
hg revert -a
# Do your merge here, once you are done, import back your local mods
hg import --no-commit mylocalchanges.txt
- 5,690
 - 1
 - 32
 - 29
 
- 
                    3To avoid creation `*.orig` files use: `hg revert -aC` – cn007b Dec 15 '15 at 10:55
 
The Mercurial shelve extension stores patches under .hg/shelved. Each is a simple patch file, and the filename is the name of the patch. So to remove a patch called 'mypatch' I can simply remove the file 'mypatch' from .hg/shelved:
rm .hg/shelved/mypatch
- 35,956
 - 47
 - 141
 - 220
 
- 6,208
 - 3
 - 49
 - 59
 
- 
                    2See [BennyMcBenBen's answer](http://stackoverflow.com/a/25558246/1286571) for a way to remove shelves using the hg shelve UI. – ForeverWintr Nov 23 '16 at 18:21
 
I created two shell scripts based on minaz's answer:
hgshelve
#!/bin/sh
hg diff > $1 && hg revert -a
hgunshelve
#!/bin/sh
hg import --no-commit $1 && trash $1
Put them in ~/bin. You need sudo apt-get install trash-cli for the trash command (or modify the script to either not remove the patch file, or use rm if you prefer).
- 272,448
 - 266
 - 850
 - 1,236