SuperAPI AI 工具集

gerrit-stacked-cls

编程与开发

查看项目

更新于 10-15 23:45

技能介绍

用途:当需要在 Gerrit(如 Dart SDK 或类似用 depot_tools 的仓库)中创建、更新或管理一串相互依赖的变更列表(stacked CLs)时使用本技能。

核心概念:Gerrit 依据推送的 git 历史中的父子关系把提交串成关系链(relation chain);它用提交信息里的 Change-Id 行识别一个 CL,用 git 提交哈希识别 CL 下的某个补丁集(Patchset)。

创建堆叠 CL:先建基线 CL,执行 git new-branch branch1,改动后 git commit -m "First change",再 git cl upload。随后在其上建依赖 CL:git checkout branch1、git new-branch branch2,改动后 git commit -m "Second change"、git cl upload。Gerrit 会自动生成关系链。

更新栈中指定 CL:若允许 amend,切到目标分支,改动后 git commit --amend(保留原 Change-Id 行),再 git cl upload。若禁止 amend 活跃 PR,则在分支上改动并新建一次提交(会产生新 Change-Id),用 git reset --soft HEAD~2 把新提交压回前一个提交后重新提交;关键是要确保最终提交信息中只保留目标 CL 的 Change-Id,若有多行 Gerrit 通常取最后一行。

解决冲突:把依赖分支(如 branch2)变基到已更新的基线分支(如 branch1)时,生成文件(如 .wat)可能冲突。可在冲突解决中接受 OURS(上游/基线版本)以快速通过,执行 git rebase --continue 完成变基,再用相应工具(如 ir_test.dart -w)重新生成期望或生成文件,并把新生成的文件提交,以保持期望历史干净准确。

关键陷阱:提交信息里出现多个 Change-Id 会把更新路由到最后一个 Change-Id 对应的 CL,务必清理为仅一个目标 Change-Id;推送与现有补丁集内容完全相同的提交会被 Gerrit 拒绝,若要强制产生新补丁集(例如恢复旧状态),可用 git commit --amend --no-edit 更新提交者时间戳以生成新提交哈希。

限制:本资料未提供适用仓库的完整清单、权限要求、错误码、收费或平台信息,相关事实暂未提供。