4

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

2 回答 2

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:.

祝你好运!

于 2012-09-15T13:54:20.247 回答
2

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

你这样做是对的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

于 2017-07-25T23:02:17.847 回答