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

Git提交被撤销后如何复制为新提交 GitLab合并请求未显示全量提交

问题解答

一、将旧提交复制为等效新提交的方法

你可以通过cherry-pick命令实现需求,操作步骤如下:

  • 先切换到feature-1分支,拉取远端最新代码保证本地分支和远端状态同步:
    git checkout feature-1 && git pull origin feature-1
    
  • 找到你需要恢复的旧提交哈希值,逐一对目标提交执行复制操作:
    git cherry-pick <旧提交哈希>
    
    • 若执行过程中出现冲突,解决冲突后执行git add .,再运行git cherry-pick --continue即可完成当前提交的复制
    • 若不需要保留多个提交的拆分结构,想合并为一个新提交,可添加-n参数批量应用多个提交的改动:git cherry-pick -n <旧提交哈希1> <旧提交哈希2> ...,所有改动应用完成后手动执行git commit生成整合的新提交即可
  • 所有提交复制完成后,推送到远端即可生效:
    git push origin feature-1
    

如果需要复制的是连续的多个提交,可直接使用范围语法:git cherry-pick <起始提交哈希>^..<结束提交哈希>,即可批量复制该区间内的所有提交。

二、MR提交列表缺失9月13日之前提交的常见场景

多人共用同一个开发分支时,出现该问题基本都是分支提交历史被篡改导致,常见场景如下:

  • 其他开发人员执行了*变基(rebase)*操作后强制推送分支:如果有人将feature-1分支基于目标分支做了变基,修改了9月13日之前的提交的父节点,或是直接删除了这部分提交记录,强制覆盖远端分支后,你的旧提交已经不在远端分支的提交链上,MR就不会识别展示这部分提交。
  • 其他开发人员执行了*提交回滚(reset)*操作后强制推送分支:如果有人将分支回滚到了9月13日的某个节点,再执行git push -f强制覆盖了远端分支,9月13日之前的提交就会从远端分支的提交历史中被移除,MR自然不会展示。
  • 旧提交被标记为已合入目标分支:如果之前有人将包含这部分旧提交的版本合并到过MR的目标分支,之后又做了合并回滚操作,MR会默认判定这些旧提交已经合入过,不会再展示在提交列表中。

三、GitLab MR的差异校验逻辑

GitLab处理合并请求时,会计算源分支最新版本和目标分支最新版本两点之间的整体差异,并不是仅校验提交列表中包含的文件改动。哪怕提交列表没有展示部分提交,只要源分支和目标分支的文件内容存在差异,都会在「变更」标签页展示,合并时也会把所有差异同步到目标分支。
需要注意的是,若提交历史被篡改导致部分提交丢失,最终合并结果以两个分支最新版本的diff为准,和提交列表是否展示无关。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 07:36:03