恢复已删除的git分支,你不知道

时间:2017-05-15 14:06:05

标签: git github version-control branch restore

所以一位同事问我(作为团队实习生GitHub经理)是否有可能恢复他几个月前创建的分支,并且最近被删除但无法记住其名称。我们的工作树如下:

  1. 主分支(主要生产版本)
  2. 分期分支(测试 在释放给主人之前)
  3. 开发分支(主要开发分支,其中所有未来的分支都是从
  4. 创建的
  5. 个人分支机构(我们的变更分支,由开发人员创建,然后在完成后合并回开发)
  6. 有问题的分支是从开发中创建的,但它从未合并过,因为它已经老了,工作优先级推迟了它。现在有时间再次研究它,我们想知道是否可以检索某种我们可以用来帮助我们记住分支名称的历史记录,以便我们可以恢复它...如果在所有可能......

    任何建议将不胜感激!谷歌搜索,但大多数答案都是基于已合并的分支。

2 个答案:

答案 0 :(得分:2)

您可以使用git reflog来检查HEAD指向的位置。

可能有checkout: moving from develop to personal_branch之类的信息,而提交是HEAD指向的personal_branch。

如果在.git/logs中清除了日志历史记录,则可以使用git fsck --full代替。

答案 1 :(得分:1)

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

但是,如果这没有帮助,计划B将找到悬挂的提交。假设它最近被删除,那么这个曾经在分支机构中成功的回购中最有可能获得成功。 (一旦提交变得无法访问,gc可能会完全删除提交,然后夹具就会启动。)查找它们的一种方法是

git fsck --unreachable --verbose

并检查输出是否类似

unreachable commit c0d3abcd...

如果你看到任何一个,你可能会看到几个;你可以用

git cat-file -p c0d3abcd

看看每个人是什么。如果您找到一个代表您想要工作的状态,请在其上放置一个分支。 (此时原始分支名称基本上是不可恢复的。)

如果本地仓库已将对象丢失为gc,您可以尝试使用该遥控器。它可能不会在克隆或拉取请求上发送无法访问的对象(尽管可能它将取决于服务器实现,你不能指望它),但它可能提供用于检查的API它的reflogs或无法访问的对象。