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

如何从同一源分支向不同目标分支创建GitLab合并请求?

问题解答

结论

通过GitLab的推送选项(git push -o)无法直接实现从同一个源分支(如test)创建多个指向不同目标分支的合并请求(MR)。

原因解析

GitLab的推送选项逻辑设计中,同一个源分支只能关联一个MR:当你从test分支推送并指定merge_request.create时,GitLab会自动查找该分支已存在的关联MR。如果找到,就会更新这个MR的目标分支(以及其他参数),而不是新建一个独立的MR。即使添加标题参数,也无法打破源分支与MR的一对一关联关系。

可行解决方案

方案1:使用GitLab API(推荐)

通过GitLab API可以绕过推送选项的限制,直接创建多个独立的MR,明确指定每个MR的源分支、目标分支和标题。示例命令如下:

# 创建test -> test2的MR
curl --request POST --header "PRIVATE-TOKEN: <你的GitLab访问令牌>" \
"https://你的GitLab域名/api/v4/projects/<项目ID>/merge_requests" \
--form "source_branch=test" --form "target_branch=test2" --form "title=合并test到test2"

# 创建test -> test3的MR
curl --request POST --header "PRIVATE-TOKEN: <你的GitLab访问令牌>" \
"https://你的GitLab域名/api/v4/projects/<项目ID>/merge_requests" \
--form "source_branch=test" --form "target_branch=test3" --form "title=合并test到test3"

方案2:临时分支中转

如果不想使用API,可以基于test分支创建多个临时分支,通过临时分支分别推送创建MR:

# 创建临时分支test-for-test2(基于test)并推送创建MR到test2
git checkout -b test-for-test2 test
git push -o merge_request.create -o merge_request.target=test2 origin test-for-test2

# 创建临时分支test-for-test3(基于test)并推送创建MR到test3
git checkout -b test-for-test3 test
git push -o merge_request.create -o merge_request.target=test3 origin test-for-test3

后续test分支有更新时,可将更新合并到对应临时分支再推送,即可更新对应的MR。此方法会产生临时分支,需要后续手动清理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 08:15:41