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 ad开发者_开发知识库d 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!
(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**
There are various situations in which you may be able to recover your files:
- 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. - 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.
- Supposing you ever ran
git stash
while working on those files, they are recoverable either viagit stash list
, or methods 1. or 2. above.
Otherwise, I'm afraid you may be out of luck. :(
- If you did commit locally those bugfixes, you can recover them with
git reflog
.
(for a single file, you can also trygit 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.
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.
精彩评论