I did:
git init
git add .
git rm -rf dirname
Looking at other answsers, git reset --hard HEAD
, git checkout -f
and git reflog
did not work, apparently because there is no HEAD to go back to, nor a commit to get the files back from.
Is there a way to get the files back?
If git is not tracking the
dirname
directory, it will not allow you to delete the directory withgit rm -rf
as it does not know about it. You will ( would have) get an error likeOnly way you could have deleted is if you had done a
git add .
orgit add dirname
after thegit init
. If that is the case, your files are gone and you cannot get them back as it was never committed and git doesn't track it. It is as good as doing arm -rf
on a normal folder ( and can't recover unless you have backups)There is no way.
Usually,
git rm
checks the files have already been committed before deleting them, so you don't lose any of your work. However, using-f
overrides this check.In short:
-f
.git reset --hard
helped while deletion was not commited yet and, generally speaking, deletion was interrupted byCtrl+Z
Nope, as far as I know. I believe that git unlinks the files, just like doing
rm -rf
does. It doesn't matter to it whether it knows about the files or not, it will gladly nuke the directory. Really, your only recourse is to try to use a file recovery tool as if you had donerm -rf
Warning: Running
git prune
without the-n
option (1) will erase your unreachable data.There may be a way, using
git prune
andgit cat-file
.Running
git prune -n
will list which objects would be removed by pruning:Each line corresponds to a deleted file.
Now, using
git cat-file
, we are able to restore the contents of the removed file to a new file:(1) From the
git prune
docs: