Differences

This shows you the differences between two versions of the page.

Link to this comparison view

blog:2019:0102_recovering_deleted_git_branch [2019/01/02 08:46] (current)
Line 1: Line 1:
 +====== Recovering deleted GIT branch ======
 +
 +{{tag>​dev git}}
 +
 +Today I'm back at work, so as a regular routine, I'm cleaned my list of "​stale"​ git branches both locally and remotely. And I have a nice handy shell script to do that. So with a single command I can completely get rid of a branch :-). This is awesome most of the time... But it's not that handy when you make a mistake, and you delete a branch you actually needed!
 +
 +====== ======
 +
 +Was I really frightened when I realized that I had just deleted a branch containing some work that was not merged yet on our master branch... If there is something I really hate, it is to **delete information**,​ or, in other words, **having to rethink about some work I've already done before** (In fact, I'm ready to toss that this is a general developer trait ;-) )
 +
 +So, I started to look for a way to fix that hoping that git would be smart enough to be able to handle such stupid mistakes, and indeed it is! I found a few links with indications on how to proceed, such as:
 +
 +  * https://​confluence.atlassian.com/​bbkb/​how-to-restore-a-deleted-branch-765757540.html
 +  * https://​stackoverflow.com/​questions/​4025916/​git-undo-local-branch-delete
 +
 +And this is worth mentioning here, just in case this could help someone else:
 +
 +Let's assume you just deleted your branch **"​my_feature_branch"​**,​ and you can't access it locally or remotely anymore, with something like: <sxh bash>git push --delete origin "​my_feature_branch"​
 +git branch -D "​my_feature_branch"</​sxh>​
 +
 +Then you cry... because you just lost hours of work... But fear not my child, you can still be saved! :-)
 +
 +=> The first think you need to do is to retrieve the **sha** of the last commit you did on that branch you just removed. To do this, we use the git **reflog** command. For instance in my case, I had removed a branch called **issue665_rcs_random_commands**,​ and I got the results: <sxh bash>$ git reflog
 +a64869a HEAD@{0}: pull: Fast-forward
 +8346ad0 HEAD@{1}: pull: Fast-forward
 +7ab3da1 HEAD@{2}: checkout: moving from issue665_rcs_random_commands to master
 +703f3fe HEAD@{3}: commit: Issue #665: Fixing AVT callbacks execution in main thread.
 +f52d0d1 HEAD@{4}: commit: Issue #665: preventing AVT leave acquisition lock without valid input stream.
 +a650707 HEAD@{5}: commit: Issue #665: Fixing unit tests.</​sxh>​
 +
 +From that output, I could see that the last commit I did on that branch for my "issue #665" had an sha value of **703f3fe**.
 +
 +=> Then you can restore the branch with the following command: <sxh bash>git branch my_feature_branch 703f3fe</​sxh>​
 +
 +<​note>​You are (most probably?) free to change the branch name when doing this operation.</​note>​
 +
 +And then, bingo! You should have your branch name back into your local branch list. And you can get back on it with the usual command: <sxh bash>git checkout my_feature_branch</​sxh>​
 +
 +That's it! Those few commands saved my day already. They might save yours too.