ChatGPT解决这个技术问题 Extra ChatGPT

Git undo local branch delete

I just deleted the wrong branch with some experimental changes I need with git branch -D branchName.

How do I recover the branch?

Glad to know I'm not the only lame-o who did this (and forgot to regularly push to remote a copy)

s
sashoalm

You can use git reflog to find the SHA1 of the last commit of the branch. From that point, you can recreate a branch using

git branch branchName <sha1>

Edit: As @seagullJS says, the branch -D command tells you the sha1, so if you haven't closed the terminal yet it becomes real easy. For example this deletes and then immediately restores a branch named master2:

user@MY-PC /C/MyRepo (master)
$ git branch -D master2
Deleted branch master2 (was 130d7ba).    <-- This is the SHA1 we need to restore it!

user@MY-PC /C/MyRepo (master)
$ git branch master2 130d7ba

Git tells you what the SHA1 was when the branch is deleted, so if you just delete it it might just be a few lines up in the command line.
if this branch exists on the server, alternatively, you can use git branch branchName origin/branchName
in addition i ended up using git cherry-pick to move the commit to branch
c
coding Bott

If you know the last SHA1 of the branch, you can try

git branch branchName <SHA1>

You can find the SHA1 using git reflog, described in the solution --defect link--.


You just saved a couple of days of my work, thanks!!!
a
amichaud

If you haven't push the deletion yet, you can simply do :

$ git checkout deletedBranchName

This answer makes Git Extensions shut up about "the branch you are trying to push seems to be a new branch for this remote." Thanks a lot.
d
developerick

If you just deleted the branch, you will see something like this in your terminal:

Deleted branch branch_name(was e562d13)

where e562d13 is a unique ID (a.k.a. the "SHA" or "hash"), with this you can restore the deleted branch.

To restore the branch, use:

git checkout -b <branch_name> <sha>

for example:

git checkout -b branch_name e562d13 

i
iLearn

Follow these Steps:

1: Enter:

git reflog show 

This will display all the Commit history, you need to select the sha-1 that has the last commit that you want to get back

2: create a branch name with the Sha-1 ID you selected eg: 8c87714

git branch your-branch-name 8c87714

Thank you very much. This worked for me. My 2 months of work was lost. This solution helped recover those files.
C
Cameron Skinner

First: back up your entire directory, including the .git directory.

Second: You can use git fsck --lost-found to obtain the ID of the lost commits.

Third: rebase or merge onto the lost commit.

Fourth: Always think twice before using -D or --force with git :)

You could also read this good discussion of how to recover from this kind of error.

EDIT: By the way, don't run git gc (or allow it to run by itself - i.e. don't run git fetch or anything similar) or you may lose your commits for ever.


yeah, that is why we use git, to avoid having to carry all that around. Every action you have committed is still available to you.
You save me 30h work, thanks! Accidentally delete a branch with only local commits, which I made a week ago and don't push.
This works great! I was also able to visualize lost commits in a tree: git fsck --lost-found | awk '/commit/{print $3}' | xargs gitk &
R
Rajeev Jayaswal

Thanks, this worked.

git branch new_branch_name sha1 git checkout new_branch_name

//can see my old checked in files in my old branch


This is not a forum, please upvote useful answers instead of reposting them.
A
Alej priv

This worked for me:

git fsck --full --no-reflogs --unreachable --lost-found
git show d6e883ff45be514397dcb641c5a914f40b938c86
git branch helpme 15e521b0f716269718bb4e4edc81442a6c11c139

E
EvZ

If you deleted a branch via Source Tree, you could easily find the SHA1 of the deleted branch by going to View -> Show Command History.

It should have the next format:

Deleting branch ...
...
Deleted branch %NAME% (was %SHA1%)
...

Then just follow the original answer.

git branch branchName <sha1>


A
Amin Shojaei

if you deleted a branch using GUI of a Jetbrains IDE(Goland, phpstorm etc)

go to

git windows(left-down corner of IDE) -> console tab -> now you can see log of executed commands by IDE and find the branch name and SHA1 from this log