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

时间:2013-07-29 17:01:06

标签: git github

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

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

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

github是否有时间限制你能做多久?如果是的话,那个时间限制是什么?

3 个答案:

答案 0 :(得分:30)

我问GitHub Support,这是他们的反应(强调我的):

  

我们为所有Pull请求使用单独的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引用是什么。

答案 1 :(得分:3)

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

gc.<pattern>.reflogexpire
  

git reflog到期会删除比此时更早的reflog个条目; 默认为90天   使用&#34; <pattern>&#34; (例如&#34; refs/stash&#34;)中间设置仅适用于与<pattern>匹配的引用。

但是......我有一个本地副本,该分支仍在其中声明...没有什么会阻止你将所述分支推回到gitHub仓库;)

Cupcake answer(upvoted)给予支持答案:无限制,这意味着那两个settings are both set to never

  • gc.reflogexpire
  • gc.reflogexpireunreachable

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


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

请参阅commit bf3d70fcommit 978f430(2019年3月28日),commit fe66776commit a65bf78commit cd8eb3acommit e5cdbd5(2019年3月15日),和commit 8bf1444(2019年3月13日)Ævar Arnfjörð Bjarmason (avar) Junio C Hamano -- gitster --合并于commit f3c19f8,2019年4月25日)

  

gc:处理&amp;检查gc.reflogExpire config

     

不要冗余地运行&#34; git reflog expire --all&#34;当gc.reflogExpiregc.reflogExpireUnreachable设置为&#34; never&#34;时,立即死亡   如果那些配置评估者不好。

     

作为早期&#34;声称缺乏提前退出&#34;更改为&#34; git reflog expire&#34;的测试显示,gc.reflogExpire{Unreachable,}的早期检查   对于&#34; git reflog expire&#34;一般不需要,但它是有道理的   for&#34; gc&#34;这是因为:

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

  2.   
  3. 根本不调用该命令它不会显示在轨道输出中,这使得当两者设置为&#34; {{1}时,它会更加明显}&#34;

  4.   
  5. 作为后来的更改文档,我们会在循环refs到期时锁定引用,即使在我们因为此配置而无法执行任何操作的情况下。

  6.   

答案 2 :(得分:3)

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

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