git保持多长时间的分支外提交?

Rob*_*ann 8 git

假设我在我的本地存储库中创建一个feature1基于名称的分支,master并添加一个或两个提交.然后我切换回master并决定feature1不会成功并删除分支.

我假设分支基本上是指向特定提交对象的"指针".

现在回答实际问题.

  1. 以上假设是否正确,或许在某种简化意义上?
  2. 提交对象在文件系统上还存在多长时间(以后我可以这样做git checkout SHA1-HERE)?是否存在某种"保留策略",它将删除不属于任何现有分支历史记录或标记的提交(不确定是否在此使用正确的术语......)?
  3. 以上任何一个都将依赖于git服务器的实现(gitosis,github等...)?
  4. 如果对象永远存在并且在一段时间/事件后没有自动清理,是否意味着将git的receive.denyNonFastForwards设置为防止数据丢失的措施是没有意义的?

这个问题的原因:我目前正在开展一个项目,该项目的receive.denyNonFastForwards执行基础是它避免丢失任何承诺的工作(我怀疑receive.denyDeletes也是强制执行的).我想确保没有更好的方法来保存已经完成但没有合并的工作,并且能够清理旧的分支以避免混乱.

Von*_*onC 6

默认为90天:

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

git reflog expire删除比此时更早的reflog条目; 默认为90天.在中间使用" <pattern>"(例如" refs/stash"),该设置仅适用于与之匹配的引用<pattern>.

所以:

  1. 90天
  2. 不(你实际上可以联系GitHub支持询问他们并恢复被删除的推送分支)
  3. "保留已提交但未合并":您可以将其推送到专用的开发分支或专用的上游回购(仅适合您)

  • 谢谢,`man git-gc` 和`man git-reflog` 是缺失的一块拼图。那么仅仅阻止服务器的存储库修剪松散的对象而不是拒绝分支删除不是更有意义吗?在实践中,您很少(阅读,从不)推送变基,因此不会有成千上万个松散的对象四处游荡…… (2认同)