Skip to content
Permalink
ma
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Go to file
 
 
Cannot retrieve contributors at this time
layout title
layouts/post.njk
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 ran 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 named git clear.

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 running git clear, you’ll have to specify the stash number, which you can find with git stash list.