我错误地删除了我的一个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
答案 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