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

GitLab中如何检出已被合并压缩的原始提交?

问题描述

合并时我同时启用了Delete source branch when merge request is accepted和Squash commits when merge request is accepted选项。
已启用两个选项

GitLab执行正常:它将提交压缩为单个提交并合并到目标分支。
压缩功能符合预期

但它仍保留了原始提交——你可以在合并请求页面的Commits标签中看到它们:
“Commits”标签

我希望能检出这些提交,但在新克隆的仓库中,Git无法通过哈希找到它们:

$ git checkout c8ad8edf
error: pathspec 'c8ad8edf' did not match any file(s) known to git

我认为这是因为git clone仅拉取从初始提交可达的提交,但GitLab存储了这些信息——我可以在浏览器中查看任意提交的详情:
可通过GitLab网页查看不可达提交

那么该如何检出这些提交?

解决方法
  • 通过合并请求引用拉取:GitLab会为每个合并请求保留专属引用,即使源分支已删除。执行以下命令(替换[MR_NUMBER]为你的合并请求编号):

    git fetch origin refs/merge-requests/[MR_NUMBER]/head:refs/heads/mr-recovered
    

    拉取完成后,用git checkout mr-recovered即可检出包含原始提交的分支。

  • 直接拉取提交哈希:获取提交的完整哈希值(从GitLab提交详情页复制),执行命令:

    git fetch origin [完整提交哈希]:refs/heads/recovered-commit
    

    之后通过git checkout recovered-commit就能访问该提交。

  • 联系管理员恢复:如果上述方法无效,可联系GitLab管理员,从仓库的备份或GitLab内部存储的不可达提交数据中提取并恢复目标提交。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 06:35:17