40

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?

StayOnTarget
  • 11,743
  • 10
  • 52
  • 81
undefined
  • 6,208
  • 3
  • 49
  • 59

4 Answers4

41

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
Community
  • 1
  • 1
BennyMcBenBen
  • 1,438
  • 2
  • 20
  • 37
32

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
minaz
  • 5,690
  • 1
  • 32
  • 29
26

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

temporary_user_name
  • 35,956
  • 47
  • 141
  • 220
undefined
  • 6,208
  • 3
  • 49
  • 59
  • 2
    See [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
0

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).

mpen
  • 272,448
  • 266
  • 850
  • 1,236