Undo `git clean`
Unfortunately, undoing a
git clean is impossible, as C’s
unlink() is called
on each of the untracked files (and directories if
-d is supplied).
I was working on a rails application earlier this week and wanted to implement a third party login authentication system. So I created a feature branch and began working on implementing the OAuth flow.
I created a new file to store all of my API keys and secrets, and quickly thereafter
added this file to my
~/.gitignore so as not to track sensitive information.
Before I could complete the feature, I had to switch back to master to push a quick
bug-fix. In the heat of the moment, I wanted to clean my working directory and
git clean -fd to remove all untracked files and directories.
Unfortunately, this removed the file containing all the API keys and secrets, and I had to visit each of the API provider’s sites to recover them.
To prevent this sort of thing from happening in the future, I created a git alias
If you add this to your
~/.gitconfig, you won’t permanently lose your untracked files.
[alias] clear = stash --keep-index --include-untracked
This will stash all and only your untracked files, and the
--keep-index option will retain
the state of the staging area.
If you accidentally "remove" untracked files with the new alias:
$ git clear
You can retrieve them with
git stash pop. If you’ve stashed a few things since
git clear, you’ll have to specify the stash number, which you can find
git stash list.