GitLab中如何检出已被合并压缩的原始提交?
问题描述
合并时我同时启用了Delete source branch when merge request is accepted和Squash commits when merge request is accepted选项。
GitLab执行正常:它将提交压缩为单个提交并合并到目标分支。
但它仍保留了原始提交——你可以在合并请求页面的Commits标签中看到它们:
我希望能检出这些提交,但在新克隆的仓库中,Git无法通过哈希找到它们:
$ git checkout c8ad8edf error: pathspec 'c8ad8edf' did not match any file(s) known to git
我认为这是因为git clone仅拉取从初始提交可达的提交,但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
相关产品推荐
相关产品推荐

