You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

合并MR并删除分支后,GitLab是否保留特性分支的原始提交?

为什么GitLab在删除特性分支后仍能显示原始提交?

这是个很常见的疑问,我来一步步拆解清楚:

1. GitLab的Merge Request会保留原始提交的引用

当你创建MR时,GitLab会在仓库内部生成一些隐藏的专用引用,比如 refs/merge-requests/<你的MR编号>/head 或者 refs/merge-requests/<你的MR编号>/diff,这些引用会牢牢指向特性分支的原始提交——哪怕你后来删除了特性分支,这些内部引用依然会存在一段时间。

Git的垃圾回收(GC)只会清理没有任何引用指向的对象(包括提交、blob文件等),只要有这些MR相关的引用在,原始提交就不会被标记为“可回收”,自然能在GitLab的MR页面、diff记录里正常显示。

2. 原始提交不会永久保留,最终会被GC清理

GitLab不会无限保留这些孤立的提交,它有一套自动清理机制:

  • 对于已经合并或关闭的MR,GitLab会在一段时间后(默认通常是几周,具体取决于实例配置)移除这些MR相关的隐藏引用。
  • 当这些引用被移除后,原始提交就变成了无任何引用的孤立对象,下一次GitLab运行仓库的垃圾回收时,这些提交就会被彻底清理掉。

不过有个例外:如果有人把原始提交的哈希复制到了其他地方(比如本地仓库、另一个fork、或者在issue/MR评论里引用了这个哈希),那这个提交会因为有外部引用而继续存在,直到所有指向它的引用都消失。

3. Rebase压缩提交的影响

你提到用rebase策略而非merge,这点确实有特殊影响:rebase压缩是创建全新的提交来替换原始提交序列,合并到main后,原始提交其实是和新提交完全独立的“平行历史”。但因为MR的引用还指着原始提交,所以它们不会被立刻清理——这和普通merge后的情况本质是一样的,区别只是rebase生成了新的提交,原始提交更“孤立”而已。

总结一下:GitLab靠MR的内部引用暂时保留原始提交,等过了保留期、没有其他引用时,GC就会把它们清理掉。

内容的提问来源于stack exchange,提问作者uranix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 17:01:49