Interested how Laravel works under the hood? → Check my Laravel Core Adventures Course

Recover a deleted branch in Git

#git

Have you ever forgotten to merge a branch and deleted it? Yep, I did it. But don't panic, fortunately there is an easy way to recover that data.

The scenario

I am working with Git in all of my projects. If you haven't used it, stop reading and start using it now. No really, leave my site and get yourself familiar with the best version control ever here.

In bigger project I am using a a [feature branch workflow](https://de.atlassian .com/git/tutorials/comparing-workflows/feature-branch-workflow/). Every new code, in my case always a bugfix or a feature, gets inside a new branch. When I am finished, I need to merge it to main branch. (develop, staging, master, production etc.) This is what I forgot to do.

After merging it to my main branch, I normally delete the branch to prevent a mess in my repositories. This is what I didn't forgot. Damn!

Note: Use the -d flag instead of the -D flag when you delete a branch. This way you get noticed if the branch wasn't merged yet.

Checkout to rescue

So what can we do about it? First we need to get the hash / id from our last commit of the deleted branch. Every commit gets a 40 digit hash code which represents the whole commit. Additionally there is a short one. We can use both of them.

If you just deleted the branch, the commit's id is right in front of you. (e2d052)

$ git branch -D feature/addCoolStuff 
Deleted branch feature/addCoolStuff (was e2d052e).

If you don't see the id in your current console, you need to look for it. Use the git reflog command to show almost every change that has been done to your repository. It also shows commit messages, which comes in useful.c

$ git reflog
a06bbba HEAD@{0}: checkout: moving from restoredCommit to master
e2d052e HEAD@{1}: checkout: moving from master to restoredCommit
a06bbba HEAD@{2}: checkout: moving from feature/addCoolStuff to master
e2d052e HEAD@{3}: commit: Add super cool comment
a06bbba HEAD@{4}: checkout: moving from master to feature/addCoolStuff
a06bbba HEAD@{5}: commit (initial): Initial commit

And again we just take the right id e2d052e. The last thing we need to do, is to restore that commit. We are going to tell git to create a new branch with that data.

git checkout -b newBranchName e2d052e

And voila, we're back on track.

Conclusion

Git is a beast! It is great, complicated, awesome, annoying, lovely, bitchy and beautiful. Luckily you can undo almost everything in Git and today I covered how to recover a deleted branch.

Do you enjoy my posts?

Sign up for my newsletter to receive updates on my latest content.

You will receive monthly updates on my latest articles and products. I do care about the protection of your data. Read my Privacy Policy.