如何高效使用Gerrit的Follow Up功能?使用时机及实操示例咨询
Gerrit Follow Up 功能的核心逻辑
这是Gerrit设计用来打通跨提交溯源链路的原生机制,本质是通过Commit Message的固定格式标记,自动在两个独立Change之间建立双向关联,和我们日常在未合入的Change上push新Patch Set的迭代逻辑完全不同。
高效使用Follow Up的典型场景
- 原Change已经合入主线,Gerrit默认会锁定已合入的Change,禁止直接push新Patch Set迭代,这时候要补对应改动必须创建独立Change,同时用Follow Up标记关联原改动
- 原Change处于Abandoned状态,后续重新基于该方向补做功能,需要关联最初的评审记录,避免重复讨论已经被否决过的设计
- 原Change评审时提出需要拆分独立提交的内容(比如补单测、补文档、拆公共逻辑),拆出来的独立提交需要和主改动建立溯源关系,方便后续追踪整个功能的完整迭代链路
- 线上问题回溯时,需要把热修复提交和最初引入问题的原Change绑定,减少排查时的链路断裂
端到端实操全流程(零断点版)
实操判断前置:如果原Change状态是Open(未合入),直接走
git commit --amendpush新Patch Set即可,不需要用Follow Up;Follow Up只适用于两个独立Change之间的关联场景
- 分支准备
拉取最新主线代码,基于需要关联的原Change对应的代码基线切新开发分支,避免带无关的提交冲突。对应命令:git checkout main && git pull origin main git checkout -b fix/avatar-upload-format-check - 提交关联标记
完成所有开发内容后,生成带独立Change-ID的提交,在Commit Message里加入固定格式的Follow Up标记,这是Gerrit自动识别关联的唯一依据。
正确的Commit Message示例:
注意事项:fix: add format check for avatar upload interface Follow Up of I987654321abcdef123456789abcdef12345678 原头像上传接口合入后未校验文件MIME类型,补充白名单校验逻辑,阻止非图片格式文件上传。- 标记后的I开头字符串是原Change的全局唯一Change-ID(在原Change详情页顶部可直接复制),不是提交的短哈希
- 新提交必须使用独立的新Change-ID,如果把新提交的Change-ID改成和原Change一致,会直接变成原Change的新Patch Set,不属于Follow Up场景
- 常规推送评审
按照正常流程把新分支push到Gerrit的评审分支即可:git push origin HEAD:refs/for/main - 关联生效验证
等新Change创建完成后,打开任意一个关联的Change详情页,在侧边栏的Relations区域,就能看到双向的Follow Up关联记录,不需要手动在网页上做额外的关联操作。
常见踩坑规避
- Follow Up没有独立的网页创建按钮,所有关联都是Gerrit解析Commit Message里的固定格式自动生成的,找不到入口属于正常情况
- Follow Up关联没有权限门槛,只要Commit Message里标注的原Change-ID真实有效,哪怕原Change是1年前合入的,关联也会自动生成
- 不要滥用Follow Up标记:两个完全无关的Change如果硬加Follow Up标记,会在关联列表里造成不必要的干扰,只给存在直接逻辑承接关系的Change加标记
内容的提问来源于stack exchange,提问作者ajay kumar tiwari
相关产品推荐
相关产品推荐

