用途:把已合并到当前主版本(develop,v11)的 PR 回移到仍受维护的旧主版本分支(默认 v10)。做法是 cherry-pick 该 PR 的压缩合并提交,并创建草稿回移 PR。
输入:PR(必填,可为 GitHub 完整 URL 或纯数字,未提供时应询问、不要猜测);目标主版本(可选,默认 v10,接受 v10、10、v9 等,规范化为 v10 之类的分支名)。
主要流程:先用 gh pr view <PR> --json number,title,baseRefName,mergeCommit,state,url 核实 PR 已合并、基线为 develop,并取压缩提交;用 git fetch origin <major> develop 与 git rev-parse --verify origin/<major> 确认维护分支存在;用 git merge-base --is-ancestor 判断是否已在目标分支上。随后 git checkout -b <branch> origin/<major>、git cherry-pick <mergeCommit-oid>。若提示为空则 git cherry-pick --abort 并停止,不用 --allow-empty 强推;有冲突时参考 git show <oid> 适配旧代码,git add -u 后 git cherry-pick --continue,无法适配就停止并告知用户。接着运行 yarn format、yarn lint:fix、yarn build:dev,并按需运行相关包测试。最后 git add -u 后在单压缩提交时用 git commit --amend -m 标题 -m "Backport of: #<PR>",非压缩合并则保留各提交信息、对 HEAD 用 git commit --amend --no-edit。
约定:标题保留原约定式前缀并把作用域加上主版本,如 fix(core): X 变为 fix(v10/core): X;无作用域时为 fix(v10): X;多作用域只在整个组前加一次,如 fix(v10/cloudflare,deno,node): X。正文首行为 Backport of: #<原始 PR 编号>;若与原 PR 有实质差异,追加 ## Differences to the original PR 逐条说明变化与原因。PR 以草稿创建;工作分支从目标主版本切出并取描述性名称。
推送与创建:git push -u origin <branch>,再用 gh pr create --draft --base <major> --title "<标题>" --body "Backport of: #<PR>";有差异段时改用 --body-file。
限制:不要直接推送 develop、master 或主版本分支;每个 PR 单独一个回移分支与草稿 PR;回移到多个主版本时各建独立分支/PR,各自基于自己的 origin/<major>。资料未提供具体收费、平台和效果信息。