如何从同一源分支向不同目标分支创建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
相关产品推荐
相关产品推荐

