34

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

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

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

github 有时间限制,你可以做多长时间?如果有,那时间限制是多少?

4

3 回答 3

48

我问了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/<pull request number>/. 被拉取请求的分支顶端的head参考点,即分支上的最后一次提交。我不确定merge参考是什么。

于 2013-07-30T18:34:38.137 回答
6

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

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

于 2014-05-31T01:22:40.450 回答
5

GitHub 支持会有一个明确的答案,但我怀疑它是reflog基于自动清除.

gc.<pattern>.reflogexpire

git reflogexpire 删除reflog比这个时间更早的条目;默认为 90 天
在中间使用“ <pattern>”(例如“ refs/stash”)时,该设置仅适用于匹配<pattern>.

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

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

  • gc.reflogexpire
  • gc.reflogexpireunreachable

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


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

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

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

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

正如对“”测试的早期“断言缺乏提前退出”更改所示,“” 通常不需要git reflog expire提前检查,但对“”有意义,因为:gc.reflogExpire{Unreachable,}git reflog expiregc

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

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

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

于 2013-07-29T17:33:17.473 回答