【问题标题】:How to recover a deleted remote branch如何恢复已删除的远程分支
【发布时间】:2016-02-12 21:48:46
【问题描述】:

我们的远程主分支已被删除。我有一个主存储库的本地副本,但它已经过时了几个版本。我可以通过将最后一个已知的提交哈希插入 URL 来查看 github 中的分支,但未能成功恢复它。我尝试了几个步骤来恢复它:

git reset --hard 16deddc05cb53dfaa2d198b1cf264416e19255e9
fatal: Could not parse object '16deddc05cb53dfaa2d198b1cf264416e19255e9'

git checkout 16deddc05cb53dfaa2d198b1cf264416e19255e9
fatal: reference is not a tree: 16deddc05cb53dfaa2d198b1cf264416e19255e9

可以理解,因为 master 不再存在。我有哪些选择可以在这里恢复?

【问题讨论】:

  • 本地真的有这个对象吗? git cat-file -t 16deddc05cb53dfaa2d198b1cf264416e19255e9 说明了什么?

标签: git github


【解决方案1】:
  1. 获取确切的提交(以及其历史记录中的所有内容):

    git fetch origin 16deddc05cb53dfaa2d198b1cf264416e19255e9
    
  2. 从中创建一个分支:

    git branch xyzzy FETCH_HEAD
    

您可以将其合并为一个步骤:

git fetch 16deddc05cb53dfaa2d198b1cf264416e19255e9:refs/heads/xyzzy

【讨论】:

  • 尽管我可以在 Web UI 中看到它,但获取失败并显示“错误:没有这样的远程 ref 16deddc05cb53dfaa2d198b1cf264416e19255e9”。
  • @Fook,我已经验证它适用于我的一个存储库(未托管在 Github 上)。因此,我认为您观察到的内容是 Github 所特有的(IIUC 他们不使用 vanilla Git),您应该尝试 Michael 的建议。
  • 太棒了!这对于我不小心删除的远程分支来说完美无缺。谢谢。
  • 对你来说可能有点晚了,但我写了a small script,它将在所需的提交处创建一个远程分支,即使你没有本地提交。
【解决方案2】:

如果您不知道最新版本的哈希值,您可能无法恢复它。也许您能做的最好的事情就是将您备份的主分支推送到 github。由于修订版已经在存储库中,这将是一个快速的网络操作。

如果您对托管存储库的机器具有 ssh 访问权限(在 github 上您没有),那么您可以在 git 存储库中搜索孤儿。孤儿是不再有引用的提交。不幸的是,在这种情况下,这对您没有帮助。

有一些提示可以帮助您恢复丢失的提交,包括这篇文章中查找孤儿的过程:

Git: Recover deleted (remote) branch

【讨论】:

  • 我确实有最新的哈希值。
  • 然后您可以使用 github 的 Web UI 将该哈希值与您的主分支进行比较,并创建(并合并)一个拉取请求。我添加了另一个答案,解释了如何使用 GitHub Web UI 来做到这一点。
【解决方案3】:

如果您确实知道最新丢失提交的哈希值,请尝试使用 github 的 Web UI 解决问题。转到以下网址:

https://github.com/{username}/{repository}/compare/{hash}

应该会出现一个按钮,Create pull request - 使用它来创建拉取请求并将您的历史合并回一个分支。

【讨论】:

  • 试过了,但没有出现按钮。它显示差异并让我评论提交,但无法创建拉取请求。
  • 可以分享一下github链接吗?也许我可以弄清楚为什么它不提供Create pull request 按钮。
  • 不幸的是,这是一个 VPN 背后的企业 github 安装。
猜你喜欢
  • 2023-01-16
  • 2021-06-25
  • 2017-12-18
  • 1970-01-01
  • 2011-07-29
  • 2010-09-08
  • 1970-01-01
  • 1970-01-01
  • 2014-07-30
相关资源
最近更新 更多