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

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

@GlostRider .. 请查看此链接:https://dev59.com/aW445IYBdhLWcg3w1tkS - thar45
你还有一个指向已删除分支顶端的本地分支吗? - knittl
@陌生人:我看了链接,但它告诉我们要创建新的分支。 - GhostRider
好的,你必须以某种方式重新创建分支。为此,您需要知道其最后提交的哈希值。 - knittl
2个回答

9

你是否有另一个(最近的)存储库克隆?或者其他人有可以让你使用的克隆?(也许有人在 Github 上派生了它)。如果是这样,你可以从其他存储库推送分支,然后一切都应该没问题。

如果没有,情况会变得有点复杂。首先,如果你最近在 development 分支上工作过,它必须出现在 HEAD reflog 中——除非你手动过期了 reflog(默认情况下,reflog 条目在 30 天后过期)。

如果你从未在本地工作过该分支(也就是说:没有 checkout 或 commit),那么你还有最后一次机会将其找回:使用 git fsck --unreachable --lost-found 命令,然后检查所有报告的提交对象。当你找到正确的提交记录(旧的 tip 时),然后发出 git branch development <hash of the commit> 命令。重新创建本地分支后,你可以再次将它推送到 GitHub 上:git push origin development:development

祝你好运!


4

这是一个老问题,但也许它会对其他人有所裨益。

你做 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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接