2010-10-26 133 views
247

我刚刚用git branch -D branchName删除了我需要的一些实验性更改的错误分支。Git撤消本地分支删除

如何恢复分支?

+2

很高兴知道我不是唯一的lame- o谁做了这件事(并且忘了定期推送到远程副本) – Ray 2017-08-24 11:48:46

+0

现在让我们3人 – 2018-01-12 11:14:05

回答

504

您可以使用git reflog来查找分支上次提交的SHA1。从这一点来说,你可以重新使用

git branch branchName <sha1> 

编辑一个分支:作为@seagullJS说,该branch -D命令告诉你SHA1,因此,如果您还没有关闭终端尚未成为真正的轻松。例如,这将删除,然后立即恢复名为master2分支:

[email protected] /C/MyRepo (master) 
$ git branch -D master2 
Deleted branch master2 (was 130d7ba). <-- This is the SHA1 we need to restore it! 

[email protected] /C/MyRepo (master) 
$ git branch master2 130d7ba 
+52

Git告诉你什么是分支被删除时的SHA1,所以如果你只是删除它,它可能只是命令行中的几行。 – seagullJS 2012-12-13 01:04:25

+1

谢谢,这节省了我的工作时间!仅供参考使用git reflog获得 albertski 2015-01-15 02:12:26

+0

非常感谢,我找到了我的“丢失”文件! – inix 2016-06-02 16:18:34

34

如果你知道该分支的最后SHA1,你可以尝试

git branch branchName <SHA1> 

您可以使用git reflog的SHA1,在溶液here描述。

+1

我如何找到sha1? – 2010-10-26 16:57:59

+1

我已经更新了关于如何找到SHA1的答案。 – Chetan 2010-10-26 16:59:25

+0

非常感谢! – 2017-08-09 12:41:33

2

第一:备份您的整个目录,包括.git目录。

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

第三:rebase或合并到丢失的提交。

四:凡事三思而后使用-D之前或与GIT :)

你也可以如何从这种错误中恢复read this good discussion --force。

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

+1

1和4是IMO的过度杀伤力。 – jwg 2013-03-21 11:07:21

+0

是的,这就是为什么我们使用git,以避免必须携带所有这些。您所犯下的每一项行为仍然适用于您。 – mateor 2013-05-03 05:26:04

18

如果你还没有推删除的是,你可以简单地做:

$ git checkout deletedBranchName 
+0

这个答案让Git Extensions闭嘴:“你试图推送的分支似乎是这个远程的一个新分支。”非常感谢。 – Omer 2014-12-21 08:56:13

10

如果您刚刚删除的分支,你会看到这样的事情在你的终端:

Deleted branch branch_name(was e562d13) 
  • 其中e562d13是一个唯一的ID(又名“SHA”或“散列”),用此可以恢复已删除的分支。

要恢复分支,使用:

git checkout -b <branch_name> <sha> 

例如

git checkout -b branch_name e562d13 
3

谢谢,这个工作。

的Git分支new_branch_name sha1

git的结帐new_branch_name

//可以看到我的老文件中检查了我的老枝