· 3 min read

Restore deleted files in git

git restore and git log to time travel and recover lost files

git restore and git log to time travel and recover lost files

Remember that file you deleted last week? Too bad, now you need it. Let’s see how git restore can help you recover it.

There are a few ways to restore deleted files in git, depending on how far away in the history the file was deleted. I’ll cover the most common scenarios and how you can find lost files with git log for those cases where you don’t exactly remember when it happened.

As usual, I recorded a video with a demo of how the command works, but if you’re just in for the commands you can find everything below.

You just deleted it

The easiest scenario, most IDEs will likely have a button somewhere (vscode has the SCM tab) to undo the deletion.

If you feel faster in the terminal, there’s a shortcut with git checkout:

git checkout HEAD path/to/file.ts

Nice and clean, your file is back. Nothing happened.

You already committed the deletion

Not too bad, you can use the exact same command as before, with HEAD~1 to go back one commit:

git checkout HEAD~1 path/to/file.ts

Time travel with git restore

If the situation is more complex, it’s probably time to explore how git restore can help you. This command is specifically designed for this kind of operation (while checkout is more general) and comes with a few extra options.

I’d recommend having a look at the official documentation to understand all the options, but here are a few common scenarios, starting with the basic one:

git restore --source=<commit> --worktree -- path/to/file.ts

The deleted file is still on main

You deleted the file in your branch, a few commits ago, but you know for sure it’s still in main. Let’s make it easy, you can use git restore to bring it back:

git restore --source=origin/main --worktree -- path/to/file.ts

Here I also added origin/ to make sure it picks the file from the remote, but if you’re at the latest version on your local main, then --source=main will do its job.

The file was deleted a long time ago, and you don’t know when

This is where git log comes in handy. You can use it to find the commit where the file was deleted, and then use git restore to bring it back.

git log --diff-filter=D --summary

This command will show you all the commits where files were deleted, and you can use the commit hash to restore the file.

However, if this happened looong time ago there might be way too many commits to look through. Fear not, you can add a filter with the path to the file:

git log --diff-filter=D --summary -- path/to/file.ts

This will only show the commits where that specific file was deleted. You can now grab the commit hash and use it with git restore:

git restore --source=<commit>~1 --worktree -- path/to/file.ts

Don’t forget to add ~1 to the commit hash. The reason is as follow, that hash is the commit where the file has been deleted, which means it’s no longer there. With ~1 you’re simply going back one commit, the one before the deletion, where the file is still there.

Undo a commit

In some other cases you might simply want to undo a commit. I got you covered! Check out this video where I explore some of the possibilities!

To be fair I undo commits quite often to the point I made a git alias for it that I called git back (it runs git reset HEAD~1 --soft).

I hope you found this article useful and now let me ask you, how do you usually go recover deleted files in git? Let me know in the comments below, I’d love to hear about your workflow!

About the author
Leonardo

Hello! My name is Leonardo and as you might have noticed, I like to talk about Web Development and Open Source!

I use GitHub every day and my favourite editor is Visual Studio Code... this might influence a little bit my conent! :D

If you like what I do, you should have a look at my YouTube Channel!

You might also like
Back to Blog