How do I delete all untracked files from my working directory in Mercurial?
Solution 1
Add the Mercurial Extension called purge. It is distributed by Mercurial.
This extension adds a “purge” command to “hg” that removes files not known to Mercurial. i.e. untracked Files. So your command would be,
hg purge
It is not enabled by default, maybe to avoid accidentally removing files that you forgot to add.
To install this extension, add this to your mercurial settings file (.hgrc on Unix, Mercurial.ini on Windows)
[extensions]
purge =
To enable this extension temporarily you can use
hg purge --config extensions.purge=
Solution 2
The proper way without purge is:
hg st -un0 | xargs -0 rm
Solution 3
Thanks! This worked for me also in Powershell:
hg st -un | rm
Solution 4
rm $(hg st -u)
...where -u stands for "untracked" you can also pick another state.
Solution 5
You can use
hg purge --all
to remove all the ignored and untracked files
(first you need to install the purge extension as explained in some answers)
Related videos on Youtube
Valentin V
Fraud detection at fingerprintjs.com Building open source tools and SaaS to empower developers to stop online fraud. Stop fraud, spam, and account takeovers with 99.5% accurate browser fingerprinting as a service.
Updated on February 22, 2021Comments
-
Valentin V over 3 years
Is it possible to delete all untracked files from my working directory? Let's say I added a bunch of files to my working directory, didn't add them via 'hg add' and now want to get rid of those new files entirely?
I'm on windows, although I'm using PowerShell, so a combined solution is also possible here.
-
Yaakov Kuperman about 12 years@simplyharsh is this way better or did you just find it less work than adding the extension?
-
simplyharsh about 12 years@YaakovKuperman I guess adding extension is lesser work than this command (one time enabling). I do not enable purge extension because I need it less than once in a fortnight. Also call me silly but, typing this command gives me enough time to think again before doing something as desctructive as 'purge'.
-
Yaakov Kuperman about 12 years@simplyharsh , that makes sense, but there's two reasons I'd go for purge all the same. First, you can do hg purge --print and see a list of what its going to get rid of before you do the purge. Second, if you do it this way you need to be in the root of the repo for it to work.
-
tacaswell over 11 years
hg purge --all
will delete all un-tracked and ignored files. This is useful for cleaning up in-source builds -
javawizard over 11 yearsIf you don't have any uncommitted modifications that you want to keep, you can also do
hg up 0; rm -r *; hg up tip
or whatever revision you're currently on. -
Pykler over 10 yearsto enable the ext temporarily you can use
hg purge --config extensions.purge=
-
dirkjot over 10 years@javawizard: This is a nice one that made me rethink how hg works. However, it only works because
rm -rf *
skips dot files and dot directories, including.hg/
. By the same token, any other dotfile (say .evil-settings) will also survive and purge is better. -
Michael Kent over 9 yearsBe aware that there is a difference in behavior between what 'hg st -u' and 'hg purge' finds. 'hg st -u' WILL NOT find untracked empty directories, while 'hg purge' WILL find (and remove) them. That may or may not be important to you.
-
Nikos Athanasiou almost 9 yearsxargs does not work in powershell - this is the only answer that's out of the box "windows friendly"
-
beauXjames over 8 yearsagreed...second on xargs not working in powershell...purge is still a viable option, though