【问题标题】:For how long can you restore/recover a deleted branch on GitHub?您可以在 GitHub 上恢复/恢复已删除的分支多长时间?
【发布时间】:2019-04-28 04:42:27
【问题描述】:

这不是关于如何在 Github 中恢复丢失的分支的问题,而是您需要通过以下用户案例故事恢复已删除的分支多长时间:

在拉取请求(通常用作代码审查的地方)中,可以合并然后删除分支,所有这些都在 github GUI 中。如果您选择删除它,您可以选择带有粗体和下划线的单词来“恢复”分支。

我怀疑这个选项有时间限制,并且 github 不会无限期地保持这个可用。

github有时间限制吗?如果是的话,时间限制是多少?

【问题讨论】:

  • 看起来所有答案都涵盖了创建拉取请求的情况。如果我从不创建拉取请求,并直接在 github UI 中删除分支会怎样? (假设我没有本地克隆)。
  • 我高度怀疑在这种情况下它已经消失了。 @MarcelloRomani。他们可能会定期运行 git gc 以将其清除为无法访问。

标签: git github


【解决方案1】:

我问GitHub Support,这是他们的回答(强调我的):

我们为所有拉取请求使用单独的 ref 命名空间,我们用于各种事情,包括恢复分支。由于我们无限期保留这些 [Pull Request] 引用,恢复分支没有时间限制

您可以使用以下命令在遥控器中查看这些特殊引用:

$ git ls-remote | grep pull
From git@github.com:<username>/<remote>.git
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa        refs/pull/1/head
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb        refs/pull/1/merge
cccccccccccccccccccccccccccccccccccccccc        refs/pull/2/head
dddddddddddddddddddddddddddddddddddddddd        refs/pull/2/merge

引用在refs/pull/&lt;pull request number&gt;/ 下命名。 head 引用指向被拉取请求的分支尖端,即分支上的最后一次提交。我不确定merge 的引用是什么。

【讨论】:

  • merge 分支似乎是与 master 的试用合并的缓存。 git fetch origin bbbbbbbb; git log --oneline --graph bbbbbbbb
【解决方案2】:

请注意,GitHub 上的某些拉取请求页面不会显示删除/恢复分支按钮,即使引用已安全存储 as described by Cupcake

这可能意味着在以后的拉取请求中再次使用了相同的分支。在存储库(在 GitHub 中)搜索 分支名称 并检查该分支上的最新拉取请求。您应该在那里找到用于恢复(或删除)分支的 UI。

【讨论】:

    【解决方案3】:

    GitHub 支持会有一个明确的答案,但我怀疑它是基于自动清除 the reflog 之前的默认 90 天期限。

    gc.<pattern>.reflogexpire
    

    git reflog expire 删除早于这个时间的reflog 条目; 默认为 90 天
    在中间使用“&lt;pattern&gt;”(例如“refs/stash”)时,该设置仅适用于与&lt;pattern&gt; 匹配的引用。

    但是...我有一个本地副本,其中仍然声明了该分支...没有什么可以阻止您将所述分支推回 gitHub 存储库;)

    Cupcakeanswer(已投票)给出支持答案:没有限制,这意味着这两个settings are both set to never

    • gc.reflogexpire
    • gc.reflogexpireunreachable

    这对于不会在本地修改这些 repos 并且只存储从外部贡献者推送的修改的托管 repo 服务是有意义的。


    更新 Git 2.22(2019 年第二季度,五年后):最后一种情况(将 gc.reflogexpiregc.reflogexpireunreachable 设置为 never)处理得更好。

    参见commit bf3d70fcommit 978f430(2019 年 3 月 28 日)、commit fe66776commit a65bf78commit cd8eb3acommit e5cdbd5(2019 年 3 月 15 日)和commit 8bf1444(2019 年 3 月 13 日)@987633 @.
    (由 Junio C Hamano -- gitster --commit f3c19f8 中合并,2019 年 4 月 25 日)

    gc: 处理和检查gc.reflogExpire 配置

    gc.reflogExpiregc.reflogExpireUnreachable 设置为“never”时不要重复运行“git reflog expire --all”,并立即死亡 如果那些配置评估器不好。

    正如早先对“git reflog expire”测试的“断言缺乏提前退出”更改所示,gc.reflogExpire{Unreachable,} 的早期检查 一般不需要“git reflog expire”,但这是有道理的 对于“gc”,因为:

    1. 类似于8ab5aa4(“parseopt:更好地处理格式错误的--expire 参数”,2018-04-21,Git v2.18.0-rc0)如果配置变量我们现在会早死设置为无效值。
      我们在“reflog expire”之前运行“pack-refs”,这可能需要一段时间,然后才会死于无效的gc.reflogExpire{Unreachable,} 配置。

    2. 根本不调用命令意味着它不会显示在轨道输出中,这使得当两者设置为“never”时发生的事情更加明显。

    3. 作为以后的更改文档,我们会在循环引用过期时锁定引用,即使在由于此配置我们最终什么都不做的情况下也是如此。

    【讨论】:

      猜你喜欢
      • 2023-01-16
      • 1970-01-01
      • 2013-05-23
      • 2014-06-11
      • 2018-11-27
      • 2014-07-30
      • 2022-11-17
      • 2017-12-18
      • 2015-11-06
      相关资源
      最近更新 更多