I'm trying to use Git for our software development. I found that if I delete a branch in Git, I could lose my code forever. That surprised me. I thought as a version control system, it should be able to let me do anything (even stupid one) without worry about harming my work.
The steps below are what I did:
The question is how can I roll back the action of deleting a branch?
Or, how can I get all history in Git, even something which has disappeared in log?
Yes, you should be able to do git reflog --no-abbrev and find the SHA1 for the commit at the tip of your deleted branch, then just git checkout [sha] . And once you're at that commit, you can just git checkout -b [branchname] to recreate the branch from there.
What Happens If I Delete a Git Branch? When you delete a branch in Git, you don't delete the commits themselves. That's right: The commits are still there, and you might be able to recover them.
You can restore a deleted file from a Git repository using the git checkout command. If you do not know when a file was last deleted, you can use git rev-list to find the checksum of the commit in which that file was deleted. Then, you can check out that commit.
To avoid the issue in the first place, Jefromi advices in the comments:
Another tip: only use
git branch -d
, notgit branch -D
.
You'll be warned if you're about to delete something that might make you lose work, then you can take a second to think before using-D
.
(Or, you can go delete fromgitk
so you really see what you're deleting.)
-d
Delete a branch.
The branch must be fully merged in its upstream branch, or inHEAD
if no upstream was set with--track
or--set-upstream
.
But if you did "lose" your work, see one of the many blogs about reflog (as James Kyburz suggests in the comments):
Git reflog to the rescue:
back to list Git reflog to the rescue September 09, 2010 — written by Chris Sloan | 0 comments »
The other day, I was working on a feature for Real Travel using our current branching strategy in that each release we do is a separate branch.
Not sure if it was a cause of lack of sleep from late hours pulled, but I accidentally deleted my local and remote copy of the branch before I merged it back into the master branch for release.
After a quick state of shock and thoughts running through my head of losing hours of work, I calmed down and relied on my Git knowledge.
Reading your full commit history:There are two ways to read the commit history in git. The first way shows a list of details commits while the other shows the log in reference to the current
HEAD
.
// log of detailed commits by users
$> git log
// reference log compared to the current HEAD
$> git reflog
Using the
reflog
command, I was able to find out exactly where the last reference to my deleted branch was.
An example output of thereflog
might look like this:
c7f3d98 HEAD@{0}: commit: Merged in some code
f5716c8 HEAD@{1}: pull : Fast-forward
d93c27b HEAD@{2}: commit: Added some items to project
...
Now the reflog will not show exactly where the branch was deleted, but if you remember your last commit to that branch and have a detailed enough message, it should be easy to find and restore.
Restoring your branch is straight forward by checking out the HEAD you want to a new branch.
$> git checkout -b my_new_branch HEAD@{5}
You can also use the hash too to checkout the new branch.
$> git checkout -b my_new_branch d93c27b
Simple enough and now I can move on with actually merging the branch in before deletion.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With