如何恢复已删除的git分支?

时间:2012-09-15 12:29:21

标签: git

我错误地删除了我的一个git分支。有没有办法恢复它?

我使用了以下命令:

$ git push :development

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

$ git reflog

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

2 个答案:

答案 0 :(得分: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

祝你好运!

答案 1 :(得分:1)

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

你做git reflog的权利是正确的,而且你没有任何东西可以帮助你确定分支被删除了..但是没关系。

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

在假设的情况下,让我们假设你在master,检查了一个新的分支special,做了一些更改,提交了它们,切换回master,然后意外删除special,可能是通过git branch -D special等命令。

运行您的git reflog命令,您将看到这样的输出。

ef15850 HEAD@{411}: checkout: moving from special to master
64e7b02 HEAD@{412}: commit: update special with stuff
b444040 HEAD@{413}: checkout: moving from master to special

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

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

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

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