How do I delete all untracked files from my working directory in Mercurial?

Mercurial

Mercurial Problem Overview


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.

Mercurial Solutions


Solution 1 - Mercurial

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 - Mercurial

The proper way without purge is:

hg st -un0 | xargs -0 rm

Solution 3 - Mercurial

Thanks! This worked for me also in Powershell:

hg st -un | rm

Solution 4 - Mercurial

rm $(hg st -u)

...where -u stands for "untracked" you can also pick another state.

Solution 5 - Mercurial

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)

Solution 6 - Mercurial

Try following:

hg st -un | xargs rm

Solution 7 - Mercurial

if you don't want to use purge:

rm $(hg st | grep ^? | awk '{print $2}')

Solution 8 - Mercurial

This should do the trick:

hg status | grep '^\?' | sed 's/^\? //' | xargs rm -rf

Solution 9 - Mercurial

Assuming that you are using a *nix system you could run something like this:

rm `hg st | awk '/\?/ {print $2}'`

from the root of the mercurial repository.

I don't know of a standard mercurial command to achieve the same but I believe there are many more command-line options to do this. I'm sure there are "better" solutions and would be interested to hear any other suggestions.

Please use this command with caution as it was not thoroughly tested.

Solution 10 - Mercurial

This works from Windows 10 command line (used cautiously of course):

for /f %g in ('hg status -un') do @echo %g & @del %g

Solution 11 - Mercurial

A quick/hacky way, if you do not have local changes, is to delete the folders you want from the file manager (Windows explorer for example) and then use "hg revert" which restores only the tracked files.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionValentin VView Question on Stackoverflow
Solution 1 - MercurialsimplyharshView Answer on Stackoverflow
Solution 2 - MercurialtonfaView Answer on Stackoverflow
Solution 3 - MercurialNikolaos GeorgiouView Answer on Stackoverflow
Solution 4 - MercurialAlexView Answer on Stackoverflow
Solution 5 - MercurialAlex LView Answer on Stackoverflow
Solution 6 - MercurialAlexei TenitskiView Answer on Stackoverflow
Solution 7 - MercurialLevView Answer on Stackoverflow
Solution 8 - MercurialKristianView Answer on Stackoverflow
Solution 9 - MercurialHeinrich FilterView Answer on Stackoverflow
Solution 10 - MercurialDave CousineauView Answer on Stackoverflow
Solution 11 - MercurialpthomaidView Answer on Stackoverflow