这不是关于如何在Github中恢复丢失分支的问题,而是关于以下用户案例故事中删除分支后你需要多长时间才能恢复它:
在拉取请求中(通常用作代码审查的地方),分支可以在github GUI中合并然后删除。如果你选择删除它,你会看到一个粗体和带下划线的单词 "restore",表示你有恢复该分支的选项。
我怀疑这个选项可能有一个时间限制,Github不会无限期地保留它。
Github是否有对此设定时间限制?如果有的话,那么时间限制是多久?
这不是关于如何在Github中恢复丢失分支的问题,而是关于以下用户案例故事中删除分支后你需要多长时间才能恢复它:
在拉取请求中(通常用作代码审查的地方),分支可以在github GUI中合并然后删除。如果你选择删除它,你会看到一个粗体和带下划线的单词 "restore",表示你有恢复该分支的选项。
我怀疑这个选项可能有一个时间限制,Github不会无限期地保留它。
Github是否有对此设定时间限制?如果有的话,那么时间限制是多久?
我向GitHub支持提问,这是他们的回答(重点是我的):
我们为所有拉取请求使用单独的ref命名空间,用于各种事情,包括恢复分支。由于我们无限期保留这些[拉取请求]引用,因此恢复分支没有时间限制。
您可以通过使用以下内容在远程中查看这些特殊引用:
$ 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
引用是什么。
git fetch origin bbbbbbbb; git log --oneline --graph bbbbbbbb
- Brian ReichleGitHub的支持团队可能会有一个确定的答案,但我怀疑它基于默认的90天期限,在此之前reflog
将自动清除。
gc.<pattern>.reflogexpire
git reflog expire
会删除早于这个时间的reflog
条目;默认为90天。
在"<pattern>
"(例如"refs/stash
")中间,该设置仅适用于与<pattern>
匹配的引用。
但是...如果您有一个声明了该分支的本地副本...没有任何东西会阻止您将该分支推回gitHub repo ;)
Cupcake的答案(已投票)给出了这个支持答案:没有限制,这意味着这两个设置都被设置为never
:
gc.reflogexpire
gc.reflogexpireunreachable
更新Git 2.22(2019年第二季度,五年后):最后一种情况(将gc.reflogexpire
和gc.reflogexpireunreachable
设置为never
)得到更好的处理。
请参阅提交bf3d70f, 提交978f430 (2019年3月28日), 提交fe66776, 提交a65bf78, 提交cd8eb3a, 提交e5cdbd5 (2019年3月15日) 和 提交8bf1444 (2019年3月13日),作者为Ævar Arnfjörð Bjarmason (avar
)。
(由Junio C Hamano -- gitster
--合并于提交f3c19f8, 2019年4月25日)
gc
: 处理和检查gc.reflogExpire
配置当
gc.reflogExpire
和gc.reflogExpireUnreachable
被设置为 "never
" 时,不要多余地运行 "git reflog expire --all
",如果这些配置值不好,则立即终止。正如早期对于 "
git reflog expire
" 的测试所显示的那样,一般情况下不希望提前检查gc.reflogExpire{Unreachable,}
,但对于 "gc
" 来说是有意义的,因为:
与 8ab5aa4 ("
parseopt
: 更好地处理格式不正确的--expire
参数", 2018-04-21, Git v2.18.0-rc0) 类似,我们现在会在配置变量设置为无效值时立即终止。
我们在 "reflog expire
" 之前运行 "pack-refs
",这可能需要一段时间,只是为了在gc.reflogExpire{Unreachable,}
配置无效时立即终止。根本不调用该命令意味着它不会出现在跟踪输出中,这使得当两者都设置为 "
never
" 时更容易理解正在发生的事情。正如后来的更改所记录的那样,在循环过期的引用时,即使由于此配置我们最终什么也没做,我们也会锁定引用。