2012-09-15 47 views
4

错误我删除了我的一个git分支。有什么方法可以恢复它吗?如何恢复已删除的git分支?

我用下面的命令:

$ git push :development 

我想恢复这个分支。我在主分支上,它没有显示任何删除命令正在运行:

$ git reflog 

1b716a1 [email protected]{0}: checkout: moving from master to origin 
1b716a1 [email protected]{1}: reset: moving to origin 
91791dc [email protected]{2}: reset: moving to 91791dc 
1b716a1 [email protected]{3}: checkout: moving from master to master 
1b716a1 [email protected]{4}: pull: Merge made by the 'recursive' strategy. 
91791dc [email protected]{5}: commit: Fix Total Label crash 
198de6f [email protected]{6}: commit: Fix the Total Label crash 
+0

@GlostRider ..检查此[链接](http://stackoverflow.com/questions/4674226/does-github-keep-deleted-remote-branches-in-history-如果这样可以那些恢复) – gks

+0

你还有一个本地分支指向删除分支的提示吗? – knittl

+0

@Stranger:我读过这个链接,但是它告诉创建新的分支 – GhostRider

回答

8

您是否有另一个(最近足够的)存储库克隆?还是其他人拥有可以访问的克隆? (也许有人在github上分享它)。如果是这样,你可以推动从其他存储库的分支,一切都应该没问题。

如果你不这样做,事情会变得更复杂一点。首先,如果您最近在development分支上工作,那么必须出现在HEAD reflog中 - 除非手动过期了reflog(默认情况下会在30天后过期reflog条目)。

如果你从未在本地工作过(IOW:没有签出或提交),最后有一次你得到它的机会:使用git fsck --unreachable --lost-found,然后检查所有报告的提交对象。当你找到了正确的(旧技巧),然后问题git branch development <hash of the commit>。在本地重新创建分支之后,可以再次将其推送到GitHub:git push origin development:development

祝你好运!

0

这是一个古老的问题,但也许会使其他人受益。

你是对的做git reflog,你是对的,没有什么可以帮助你识别分支被删除..但没关系。

我们假设你删除的分支标题为special

在一个假设的情况,让我们假设你是在master,签出一个新的分支special,做了一些修改,提交他们,切换回master,然后删除special不慎,可能通过像git branch -D special一些命令。

运行你的git reflog命令,你会看到这样的输出。

ef15850 [email protected]{411}: checkout: moving from special to master 
64e7b02 [email protected]{412}: commit: update special with stuff 
b444040 [email protected]{413}: checkout: moving from master to special 

您可以搜索您删除的分支名称。你会找到它的地方。

由于您无法删除您当前处于活动状态的分支,因此您必须在某个时间点离开该分支才能删除该分支。

您可以在切换分支之前立即转到提交哈希,并根据您删除的分支创建新分支。

在这种情况下,git checkout -b recovered_special 64e7b02