Git undo local branch delete

后端 未结 8 1686
慢半拍i
慢半拍i 2020-11-29 14:52

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

How do I recover the branch?

相关标签:
8条回答
  • 2020-11-29 15:07

    This worked for me:

    git fsck --full --no-reflogs --unreachable --lost-found
    git show d6e883ff45be514397dcb641c5a914f40b938c86
    git branch helpme 15e521b0f716269718bb4e4edc81442a6c11c139
    
    0 讨论(0)
  • 2020-11-29 15:15

    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 here.

    0 讨论(0)
  • 2020-11-29 15:16

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

    $ git checkout deletedBranchName
    
    0 讨论(0)
  • 2020-11-29 15:17

    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
    
    0 讨论(0)
  • 2020-11-29 15:18

    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.

    0 讨论(0)
  • 2020-11-29 15:18

    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

    0 讨论(0)
提交回复
热议问题