我们有多个开放的合并请求,所有请求都指向一个特定的主分支。为了保持一致性,我们将默认分支从 master 切换到另一个分支(称为 trunk)。问题是,一些存储库已经有指向旧主分支的开放合并请求。那么是否可以编辑所有这些现有的合并请求并将其目标分支更改为指向新的主分支(主干)。
使用 Gitlab API。
首先,找到源分支为
master
的所有MR:
GET /merge_requests?target_branch=master
从此请求中获取
project_id
和 merge_request_iid
。
然后,用目标分支更新所有 MR
trunk
:
PUT /projects/:project_id/merge_requests/:merge_request_iid?target_branch=trunk
由于您的 MR 数量是连续的(200+),请不要忘记使用 Pagination 来处理您想要获取/更新的所有 MR。
使用 Nicolas Pepinster 答案,官方 GitLab CLI(v1.40)和 jq 在自托管(为了好玩)GitLab 上使用 API v4:
# your gitlab instance, if not gitlab.com, as set in your glab-cli/config.yml
export GITLAB_HOST=gitlab.example.net
old_branch=master
new_branch=trunk
# limit the request to "your-group/your-project", otherwise will do it for all your projects
glab mr list -F json -R "your-group/your-project" --target-branch="$old_branch" |
jq -r '.[]|[.project_id, .iid]|@tsv' |
while read -r project_id iid
do glab api -X PUT "projects/${project_id}/merge_requests/${iid}?target_branch=$new_branch"
done