Git undo local branch delete

时间:2010-10-26 16:50:15

标签: git branch git-branch

我刚刚删除了错误的分支,并使用git branch -D branchName进行了一些实验性更改。

如何恢复分支?

9 个答案:

答案 0 :(得分:622)

您可以使用git reflog查找分支的最后一次提交的SHA1。从那时起,您可以使用

重新创建分支
git branch branchName <sha1>

编辑:正如@seagullJS所说,branch -D命令会告诉你sha1,所以如果你还没有关闭终端,它就变得非常容易了。例如,这会删除然后立即恢复名为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

答案 1 :(得分:47)

如果您知道分支的最后一个SHA1,可以尝试

git branch branchName <SHA1>

您可以使用解决方案here中描述的git reflog找到SHA1。

答案 2 :(得分:27)

如果您尚未推送删除,只需执行以下操作:

$ git checkout deletedBranchName

答案 3 :(得分:19)

如果您刚刚删除了分支,您将在终端中看到类似的内容:

Deleted branch branch_name(was e562d13)
  
      
  • 其中e562d13是唯一的ID(例如&#34; SHA&#34;或&#34;哈希&#34;),您可以使用此功能恢复已删除的分支。
  •   

要恢复分支,请使用:

git checkout -b <branch_name> <sha>

例如

git checkout -b branch_name e562d13 

答案 4 :(得分:7)

执行以下步骤:

1:输入:

git reflog show 

这将显示所有“提交”历史记录,您需要选择具有要返回的最后一个提交的sha-1

2:使用您选择的 Sha-1 ID 创建分支名称,例如:8c87714

git branch your-branch-name 8c87714

答案 5 :(得分:3)

首先:备份整个目录,包括.git目录。

第二:您可以使用git fsck --lost-found获取丢失提交的ID。

第三:重新绑定或合并到丢失的提交。

第四:在使用-D或--force与git之前总是三思而后行。)

您还可以read this good discussion了解如何从此类错误中恢复过来。

编辑:顺便说一下,不要运行git gc(或允许它自己运行 - 即不运行git fetch或类似的东西)或者你可能永远失去你的提交。

答案 6 :(得分:3)

谢谢,这很有用。

  

git branch new_branch_name sha1

     

git checkout new_branch_name

//可以在我的旧分支中看到旧的签入文件

答案 7 :(得分:1)

如果您通过 Source Tree 删除了一个分支,您可以通过转到 View -> Show Command History 轻松找到已删除分支的 SHA1。

它应该有下一个格式:

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

然后按照原始答案进行操作。

git branch branchName <sha1>

答案 8 :(得分:0)

这对我有用:

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