How to unstage large number of files without deleting the content
git reset
If all you want is to undo an overzealous "git add" run:
git reset
Your changes will be unstaged and ready for you to re-add as you please.
DO NOT RUN git reset --hard
.
It will not only unstage your added files, but will revert any changes you made in your working directory. If you created any new files in working directory, it will not delete them though.
Use git reset HEAD
to reset the index without removing files. (If you only want to reset a particular file in the index, you can use git reset HEAD -- /path/to/file
to do so.)
The pipe operator, in a shell, takes the stdout
of the process on the left and passes it as stdin
to the process on the right. It's essentially the equivalent of:
$ proc1 > proc1.out
$ proc2 < proc1.out
$ rm proc1.out
but instead it's $ proc1 | proc2
, the second process can start getting data before the first is done outputting it, and there's no actual file involved.
If you have a pristine repo (or HEAD isn't set)[1] you could simply
rm .git/index
Of course, this will require you to re-add the files that you did want to be added.
[1] Note (as explained in the comments) this would usually only happen when the repo is brand-new ("pristine") or if no commits have been made. More technically, whenever there is no checkout or work-tree.
Just making it more clear :)