恢复您没有的已删除git分支';我不知道他的名字

恢复您没有的已删除git分支';我不知道他的名字,git,github,version-control,branch,restore,Git,Github,Version Control,Branch,Restore,因此,一位同事问我(作为团队培训生GitHub经理),是否有可能恢复他几个月前创建的分支机构,该分支机构最近被删除,但不记得其名称。我们的工作树如下: 主分支机构(主要生产版本) 分段分支(测试) 发布到主控前) 开发分支机构(所有未来分支机构的主要开发分支机构 个人分支(我们的行业分支,我们对其进行更改,从开发中创建,完成后再合并到开发中) 所讨论的分支是从开发中创建的,但它从未被合并,因为它变老了,工作优先级将其推后。现在有时间再次进行工作了。我们想知道是否有可能检索某种历史,我们可以使用它

因此,一位同事问我(作为团队培训生GitHub经理),是否有可能恢复他几个月前创建的分支机构,该分支机构最近被删除,但不记得其名称。我们的工作树如下:

  • 主分支机构(主要生产版本)
  • 分段分支(测试) 发布到主控前)
  • 开发分支机构(所有未来分支机构的主要开发分支机构
  • 个人分支(我们的行业分支,我们对其进行更改,从开发中创建,完成后再合并到开发中)
  • 所讨论的分支是从开发中创建的,但它从未被合并,因为它变老了,工作优先级将其推后。现在有时间再次进行工作了。我们想知道是否有可能检索某种历史,我们可以使用它来帮助我们记住分支名称,然后我们可以恢复它…如果有可能的话


    如果您有任何建议,我们将不胜感激!您已经在谷歌上搜索过,但大多数答案都是基于重新合并的分支。

    您可以使用
    git reflog
    来检查头部指向何处

    可能有这样的信息,比如
    签出:从开发转移到个人分支
    ,提交是HEAD指向的个人分支


    不幸的是,如果日志历史记录在
    .git/logs
    中被清除,您可以使用
    git fsck--full

    根据Marina-MSFT的回答,最好的情况是在最初创建分支的repo的reflog中找到帮助(因为它最有可能拥有相关的reflog条目)

    但如果这没有帮助,计划B将是定位悬空的提交。同样,这在曾经容纳分支的repo(假设分支最近被删除)中有最好的成功机会。(一旦提交变得不可访问,就有可能
    gc
    将完全删除提交,然后启动jig。)寻找它们的一种方法是

    git fsck --unreachable --verbose
    
    然后检查输出是否有以下内容

    unreachable commit c0d3abcd...
    
    如果你看到一些,你可能会看到一些;你可以使用

    git cat-file -p c0d3abcd
    
    要查看每个分支是什么。如果找到一个表示要从中工作的状态的分支,请在其上放置一个分支。(此时原始分支名称基本上无法恢复。)


    如果本地repo将对象丢失到
    gc
    ,您可以尝试远程。它可能不会在克隆或拉取请求中发送无法访问的对象(尽管可能会发送,这取决于服务器实现,但您不能指望它)但是,如果ReFug不能提供太多的帮助,也可以考虑检查悬空对象。谢谢,你如何检查悬空对象?ReFoLG没有返回足够远的地方。请记住,ReFoLG不与原点/克隆之间共享,因此ReFuLG只能在克隆TH上使用。at访问了相关的分支。也就是说,不幸的是,git似乎会在分支被删除后立即丢弃特定于分支的reflog,因此您将依赖于它看起来的头reflog谢谢,我们很幸运,因为另一位同事仍然拥有它的遥控器,所以我们能够通过SHA跟踪并创建一个新分支。每个人的answers帮了大忙,谢谢!!:@Edmundo谢谢你的提醒,我更新了我的答案:)丢失的树枝被推到远程了吗?如果是的话,很可能其他团队成员已经获取了它,并且没有费心在本地回购协议上运行远程修剪。问问周围是否有人仍然有一个来源/失去的分支。它会被推,但大多数情况下,另一个没有分支,除非他致力于它们。