你可以在GitHub上恢复/恢复已删除的分支多长时间?

Bla*_*ble 21 git github

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

在拉取请求(通常用作代码审查的地方)内,可以在github GUI中合并然后删除分支.如果您选择删除它,您将获得带有加粗和带下划线的单词的选项,以"恢复"分支.

我怀疑这个选项有一个时间限制,并且github无法无限期地保留它.

github有多长时间可以做到这一点吗?如果是的话,那个时间限制是多少?

小智 32

我问GitHub支持,这是他们的回应(强调我的):

我们为所有Pull请求使用单独的ref命名空间,我们将其用于各种事情,包括恢复分支.由于我们无限期地保留那些[Pull Request] refs,因此恢复分支没有时间限制.

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

$ 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
Run Code Online (Sandbox Code Playgroud)

引用在名称空间下refs/pull/<pull request number>/.head请求拉出的分支顶端的引用点,即分支上的最后一次提交.我不确定merge参考是什么.


小智 6

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

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


Von*_*onC 5

GitHub的支持,将有一个明确的答案,但我怀疑它是基于默认的90天左右的自动清除之前reflog

gc.<pattern>.reflogexpire
Run Code Online (Sandbox Code Playgroud)

git reflogexpire 删除reflog早于这个时间的条目;默认为 90 天。中间
带有“ <pattern>”(例如“ refs/stash”)的设置仅适用于与<pattern>.

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

Cupcake回答(已投票)给出了支持答案:no limit,这意味着这两个设置都设置为never

  • gc.reflogexpire
  • gc.reflogexpireunreachable

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


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

参见提交 bf3d70f提交 978f430(2019 年 3 月 28 日)、提交 fe66776提交 a65bf78提交 cd8eb3a提交 e5cdbd5(2019 年 3 月 15 日)和提交 8bf1444由(2019年3月13日)ÆvarArnfjörðBjarmason( )avar
(由Junio C gitsterHamano合并-- --提交 f3c19f8 中,2019 年 4 月 25 日)

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

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

正如较早对“ git reflog expire”测试的“断言缺乏早期退出”更改所示,gc.reflogExpire{Unreachable,} 一般不需要对“ ”进行早期检查git reflog expire,但对“ ”来说是有意义的,gc因为:

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

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

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