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

Gerrit如何将dev分支待审补丁集迁移到已合入的master分支

Gerrit dev分支废弃变更迁移到master分支解决方案

报错根因说明

  • cherry-pick冲突:dev分支合入master时的合并逻辑与补丁基线存在差异,导致代码行冲突
  • 无法为废弃变更新增补丁集:dev分支被标记为停用后,对应refs/for/dev下的变更已被Gerrit自动标记为废弃状态,禁止修改
  • 相同Change-Key冲突:Gerrit全局唯一的Change-Id已经绑定了原dev分支的废弃变更,无法重复绑定到master分支的新变更
  • 直接push报错:通常是未解决冲突、未更新Change-Id导致的规则校验不通过

方案1:保留完整评审评论的迁移方案

此方案适用于拥有Gerrit变更移动权限的场景,可完整保留原变更的所有评审评论、历史补丁集记录:

  1. 打开原dev分支变更的Gerrit网页端页面,在右上角操作菜单找到Move选项
  2. 目标分支选择master,勾选「必要时合并」选项后提交
  3. 若触发冲突提示,按以下步骤本地解决后推送:
    # 拉取最新master代码
    git fetch origin master && git checkout origin/master
    # 拉取对应变更的补丁集,将尖括号内容替换为实际值,示例:refs/changes/45/12345/3
    git fetch origin refs/changes/<后两位变更号>/<变更号>/<补丁集号> && git cherry-pick FETCH_HEAD
    # 解决所有冲突后标记已解决
    git add .
    # 保留原提交信息中的Change-Id,不要修改,完成拣选
    git cherry-pick --continue
    # 推送到master的评审分支
    git push origin HEAD:refs/for/master
    
  4. 推送完成后,原变更的所有历史数据会自动关联到新的master分支变更条目下。

方案2:无法直接迁移时新建master分支变更方案

如果没有移动权限、原变更已被锁定,按以下步骤创建新的变更,可手动关联原评审记录:

  1. 基于最新master创建本地临时分支
    git fetch origin master && git checkout -b migrate_temp origin/master
    
  2. cherry-pick原dev分支的对应提交,替换为实际的提交哈希值
    git cherry-pick <原提交哈希>
    
  3. 解决冲突后,修改提交信息删除原有Change-Id:
    git add .
    git commit --amend
    # 在弹出的提交信息编辑页,手动删除Change-Id: xxxx那一行后保存退出,Gerrit的commit-msg钩子会自动生成全新的Change-Id
    
  4. 推送到master评审分支
    git push origin HEAD:refs/for/master
    
  5. 若需要关联原评审信息,可在新变更的描述区补充说明:

    本变更迁移自原dev分支变更#<原变更号>,评审历史可参考原变更记录

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 20:09:00