Tyra
Tyra

Reputation: 531

I've just deleted one week of work! How to undo git rm -r --cached?

I commited a wrong file, so I wanted to clean it up, but accidentally I overwrote all my files in the directory with last files committed to git.

Help please!

What I did:

git add fileIdidnotwanttoadd
git rm -r --cached .
git reset --hard HEAD

result: All my fixes are gone! I fixed 3 very hard bugs and it's all gone!


Edit:

Thank you all. I used most of your suggestions, still had to redo a few things, but all is restored now. No more perfectionism, I learned my lesson!

Upvotes: 21

Views: 14834

Answers (4)

Josh Albert
Josh Albert

Reputation: 1124

I did not find any of the above solutions successful. Running

git status

in the root you will see all the uncommitted changes. To discard those changes caused by the

git -rm --cached <files>

you would want to use

git checkout -- *

I hope this helps alleviate your stress.

Upvotes: 0

sehe
sehe

Reputation: 392911

(from: Recover from git reset --hard?)

You cannot get back uncommitted changes in general, so the real answer here would be: look at your backup. Perhaps your editor/IDE stores temp copies under /tmp or C:\TEMP and things like that.[1]

git reset HEAD@{1}

This will restore to the previous HEAD - in case you had something committed earlier

[1]

  • vim e.g. optionally stores persistent undo,
  • eclipse IDE stores local history;

such features might save your a**

Upvotes: 14

VonC
VonC

Reputation: 1323883

  • If you did commit locally those bugfixes, you can recover them with git reflog.
    (for a single file, you can also try git rev-list)
  • If you didn't commit them (ie. they were only in the working tree, not the repo), they are gone from your local working tree.
  • If you did add them to the index (but not commit them), see Mark's answer.

Upvotes: 7

Mark Longair
Mark Longair

Reputation: 467131

There are various situations in which you may be able to recover your files:

  1. If you staged your changes before doing the above commands (i.e. ran git add <file> when <file> contained the content you want to get back) then it should be possible to (somewhat laboriously) get that file back by following this method.
  2. If you ever created a commit that contained those files, then you can return to that commit by finding the object name of the commit in the reflog and then creating a new branch based on it. However, it sounds from the above as if you never committed those files.
  3. Supposing you ever ran git stash while working on those files, they are recoverable either via git stash list, or methods 1. or 2. above.

Otherwise, I'm afraid you may be out of luck. :(

Upvotes: 7

Related Questions