这不是关于如何在 Github 中恢复丢失的分支的问题,而是您需要通过以下用户案例故事恢复已删除的分支多长时间:
在拉取请求(通常用作代码审查的地方)中,可以合并然后删除分支,所有这些都在 github GUI 中。如果您选择删除它,您可以选择带有粗体和下划线的单词来“恢复”分支。
我怀疑这个选项有时间限制,并且 github 不会无限期地保持这个可用。
github 有时间限制,你可以做多长时间?如果有,那时间限制是多少?
我问了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
参考是什么。
请注意,GitHub 上的某些拉取请求页面不会显示删除/恢复分支按钮,即使引用已按照 Cupcake 所述安全存储。
这可能意味着在以后的拉取请求中再次使用了相同的分支。在仓库(在 GitHub 中)搜索分支名称并检查该分支上的最新拉取请求。您应该在那里找到用于恢复(或删除)分支的 UI。
GitHub 支持会有一个明确的答案,但我怀疑它是reflog
基于自动清除.
gc.<pattern>.reflogexpire
git reflog
expire 删除reflog
比这个时间更早的条目;默认为 90 天。
在中间使用“<pattern>
”(例如“refs/stash
”)时,该设置仅适用于匹配<pattern>
.
但是...我有一个本地副本,其中仍然声明了该分支...没有什么能阻止您将所述分支推回 gitHub 存储库;)
Cupcake的答案(赞成)给出了支持答案:no limit,这意味着这两个设置都设置为never
:
gc.reflogexpire
gc.reflogexpireunreachable
这对于不会在本地修改这些 repos 并且只存储从外部贡献者推送的修改的托管 repo 服务是有意义的。
更新 Git 2.22(2019 年第二季度,五年后):最后一种情况(设置gc.reflogexpire
和gc.reflogexpireunreachable
to 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 --all
当gc.reflogExpire
和gc.reflogExpireUnreachable
设置为“ ”时不要重复运行“ ”never
,如果这些配置评估器不好,则立即死亡。正如对“”测试的早期“断言缺乏提前退出”更改所示,“” 通常不需要
git reflog expire
提前检查,但对“”有意义,因为:gc.reflogExpire{Unreachable,}
git reflog expire
gc
与8ab5aa4(“
parseopt
:更好地处理格式--expire
错误的参数”,2018-04-21,Git v2.18.0-rc0)类似,如果配置变量设置为无效值,我们现在将提前死亡。
我们在“pack-refs
”之前运行“reflog expire
”,这可能需要一段时间,然后才会死于无效gc.reflogExpire{Unreachable,}
配置。根本不调用该命令意味着它不会显示在轨道输出中,这使得当两者设置为“
never
”时发生的事情更加明显。作为稍后的更改文档,我们在循环引用过期时锁定引用,即使在由于此配置我们最终什么都不做的情况下也是如此。