【问题标题】:Cherry-pick to multiple branches樱桃采摘到多个分支机构
【发布时间】:2025-12-08 10:55:01
【问题描述】:

我一直在从事一个使用不同数据库软件的具有多个环境的项目(想象两个分支用于测试,两个用于预生产,另外两个用于生产等)。有时代码几乎相同,但每种环境都有其差异。一旦需要对所有这些分支之间的公共文件进行更改,那么挑选樱桃的过程就会很累。

经过几个小时的研究,我发现了一个名为 PR Multi-Cherry-Pick 的扩展程序,但问题是该扩展程序不仅创建了 Pull请求但发布它们。但是,团队的一项政策是仅在其较低层批准后发布拉取请求(仅在其在两个测试存储库等中获得批准后才在预生产中发布)。除此之外,我在一个类似的问题中阅读了合并解决方案,但所有分支之间没有已知的共同祖先。

有没有办法挑选并创建所有这些 PR 作为草稿?扩展程序的使用不是强制性的。

【问题讨论】:

  • 我们在谈论多少精选和 PR?如果这些分支中的每一个都描述了一个环境,但您想要在每个环境中设置相同的代码版本,我建议使用单个分支,并且将每个环境的特性作为该分支中的文件或目录移动。
  • @LeGEC 感谢您的建议。由于这是一个已经为我们的客户运行的庞大项目,我相信将所有文件放在一个分支中会同时很繁重和危险,尤其是因为测试。通常,我们在一个分支中进行更改,然后将它们挑选到其他 5 个分支。在这种特殊情况下,主要目标不是设置相同的版本,而是可能与之相反。大多数情况下,一个分支在几个特性方面领先于另一个分支,因此不可能一次发布所有这些修改。
  • 我刚刚明白了一点:“樱桃采摘”是指 Azures “樱桃采摘公关”?

标签: git azure-devops cherry-pick


【解决方案1】:

您可以使用Cherry Picks - Create api 和Pull Requests - Create api 来实现您想要的。

首先,使用Cherry Picks - Create api 创建 Cherry Picks:

POST https://dev.azure.com/{organization}/{project}/_apis/git/repositories/{repositoryId}/cherryPicks?api-version=6.0-preview.1

Body:

{
    "generatedRefName":"refs/heads/TopicBranchName",
    "ontoRefName":"refs/heads/TargetBranchName",
    "source":{
        "pullRequestId":xx
        }
}

然后使用Pull Requests - Create api 创建 PRs 作为草稿:

POST https://dev.azure.com/{organization}/{project}/_apis/git/repositories/{repositoryId}/pullrequests?api-version=6.0

Body:

{
   "isDraft": true,
   "sourceRefName": "refs/heads/TopicBranchName",
   "targetRefName": "refs/heads/TargetBranchName",
   "title": "cherrypicks"
}

【讨论】:

  • 你查看我的回复了吗?有用吗?