【问题标题】:Prevent branches from being deleted on PR completion防止分支在 PR 完成时被删除
【发布时间】:2026-01-03 12:35:01
【问题描述】:

在 Azure Devops 中,我有一个带有开发分支的 git 存储库。我们从这个分支创建多个功能分支,并通过拉取请求将代码合并到开发中。一旦我们完成拉取请求,功能分支就会被删除。

我想防止这种情况发生。我想保留这些功能分支。我该怎么做?

【问题讨论】:

  • @jonrsharpe 有没有办法确保这甚至不是一个选项?换句话说,我们根本无法合并和删除分支。
  • 为什么要保留功能分支?这是相当罕见的。如果你想保留提交历史,那么就不要压缩合并。

标签: git azure-devops pull-request


【解决方案1】:

防止分支在 PR 完成时被删除

确实,取消选中合并后删除选项是最直接的解决方案。

但是,我们有时会忽略在频繁 PR 中检查此选项。目前,这个选项对我们来说还不够。

要解决此问题,解决方法是为目标分支设置分支安全(根据您的情况设置多个功能分支):

在 Azure Devops Branches 选项卡中 -> 单击 按钮以获取 Feature 分支 -> Branch security -> 将用户和组的 Force push (rewrite history, delete branches and tags) 更改为 Deny -> 保存更改。

那么,合并后删除选项将不可用:

注意:

  • 默认情况下,PR 完成窗口中的合并选项后删除源分支未选中/选中,而是基于上次的设置。比如现在取消选择,下次打开 PR 完成窗口时,合并后删除源分支选项会被取消。
  • 就像大牛说的,retain feature branches不是一个正常的操作,我们要知道它可能带来的一些问题。比如,如果我们选择 Merge 类型为squash commit 并在第一次 PR 时保留特征分支,我们在第二次 PR 时会发生冲突。因为我们保留了功能分支上的提交。

希望这会有所帮助。

【讨论】:

  • 嗨,里奥。您是说我每次都需要更改我创建的每个功能分支的设置吗?
  • @SachinKainth,是的,不幸的是,没有模板可以为所有功能分支设置分支安全性,因此,我们必须更改您创建的每个功能分支的设置。 但是,我们不需要每次都改变这个设置,因为特征分支并没有被删除。我们只需为所有功能分支设置一次。
  • @SachinKainth,那么,进展如何?如果有任何进展,请告诉我。