git recover deleted file where no commit was made after the delete – Dev

The best answers to the question “git recover deleted file where no commit was made after the delete” in the category Dev.

QUESTION:

I deleted some files.

I did NOT commit yet.

I want to reset my workspace to recover the files.

I did a git checkout ..

But the deleted files are still missing.

And git status shows:

# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   deleted:    cc.properties
#   deleted:    store/README
#   deleted:    store/cc.properties
#

Why doesn’t git checkout . reset the workspace to HEAD?

ANSWER:

You’ve staged the deletion so you need to do:

git checkout HEAD cc.properties store/README store/cc.properties

git checkout . only checks out from the index where the deletion has already been staged.

ANSWER:

The output tells you what you need to do. git reset HEAD cc.properties etc.

This will unstage the rm operation. After that, running a git status again will tell you that you need to do a git checkout -- cc.properties to get the file back.

Update:
I have this in my config file

$ git config alias.unstage
reset HEAD

which I usually use to unstage stuff.

ANSWER:

To recover all unstaged deletions at once, automatically, without specifying each single path:

git ls-files -z -d | xargs -0 git checkout --

To recover all staged deletions at once, automatically, without specifying each single path:

git status | grep 'deleted:' | awk '{print $2}' | xargs git checkout --

ANSWER:

Just do git checkout path/to/file-I-want-to-bring-back.txt