Created
August 5, 2011 18:37
-
-
Save subfuzion/1128192 to your computer and use it in GitHub Desktop.
Git Tips: Reset, Clean - Remove untracked files and directories from the working tree when switching branches or checking out different commits.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
git reset --hard | |
git clean -f -d | |
Description: | |
============ | |
Git Tips: Remove untracked files and directories from the working | |
tree when switching branches or checking out different commits. | |
Explanation: | |
============ | |
When switching branches or checking out another set of commits, | |
you might want to only have the files and directories that are | |
a part of that actual version. The commands shown above will | |
accomplish this. | |
Be warned that any untracked files will be deleted, along with | |
changes to tracked files. The two commands together reset the | |
index and working tree, so ensure that any changes you don't want | |
to lose were either committed to another branch or otherwise | |
backed up somehow. | |
Reference: | |
========== | |
git reset --hard | |
http://www.kernel.org/pub/software/scm/git/docs/git-reset.html | |
Resets the index and working tree. Any changes to tracked files | |
in the working tree since <commit> are discarded. | |
git clean -f -d | |
http://www.kernel.org/pub/software/scm/git/docs/v1.7.6/git-clean.html | |
-d | |
Remove untracked directories in addition to untracked files. If an untracked directory is managed by a different git repository, it is not removed by default. Use -f option twice if you really want to remove such a directory. | |
-f | |
--force | |
If the git configuration variable clean.requireForce is not set to false, git clean will refuse to run unless given -f or -n. |
Cheers. Worked as decribed.
Thanks for the pointer! My 'lazy web' searches have brought me back here a few times, so I hope you'll forgive my scribbling this Note to Self here for the next time. As @alexmgillis mentioned, it's impossible to get back uncommitted changes if you run these command by mistake, so I recommend the following alias:
[alias]
clobber = !git stash && git reset --hard && git clean -fd
Stashing the working copy state before running git reset --hard
is nearly always a good idea, since it adds any uncommitted changes to the reflog so you can retrieve them later if you regret deleting them. Here's a short demonstration:
$ vim README.md
$ # make some edits
$ git clobber
Saved working directory and index state WIP on (no branch): 93bc2e2072 Merge pull request #18928 from tensorflow/release-patch-4-1
HEAD is now at 93bc2e2072 Merge pull request #18928 from tensorflow/release-patch-4-1
$ git status
HEAD detached at v1.8.0
nothing to commit, working tree clean
$ git diff stash@{0}
diff --git a/README.md b/README.md
index 5efde96d7b..99f4a253d9 100644
--- a/README.md
+++ b/README.md
@@ -96,6 +96,3 @@ Learn more about the TensorFlow community at the [community page of tensorflow.o
## License
[Apache License 2.0](LICENSE)
-
-Very important changes that I accidentally obliterated. But it's okay! I
-stashed them first, so they can be resurrected...
This is great. I'm always resetting and cleaning
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
just be careful or you will lost a lot and possibly no way to get it back. Make a backup before you do something like this.