完成、放弃或还原拉取请求

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

Visual Studio 2019 | Visual Studio 2022

当所有必需审阅者批准拉取请求 (PR) 并且 PR 满足所有分支策略要求后,可以将更改合并到目标分支并完成 PR。 或者,如果决定不继续进行 PR 中的更改,可以放弃 PR

要处理审阅者的更改,以及回复并解决评审注释,请参阅处理注释

先决条件

  • 必须在项目上启用 Repos。 如果 Repos 中心和关联页面未显示,请参阅打开或关闭 Azure DevOps 服务以重新启用 Repos。

  • 要完成 PR,在 PR 所在的项目中,必须是“参与者”安全组的成员或具有相应的权限。

  • 要参与 PR,必须是“读取者”安全组的成员或具有相应的权限。

  • 要查看或评审 PR,必须具有对 Azure DevOps 项目的基本或更高的访问权限。

  • 如果你不是要参与的项目的成员,请添加为成员

    注意

    对于公共项目,被授予利益干系人访问权限的用户对 Azure Repos 具有完全访问权限。

  • 必须在项目上启用 Repos。 如果 Repos 中心和关联页面未显示,请参阅打开或关闭 Azure DevOps 服务以重新启用 Repos。
  • 要完成 PR,在要更改的项目中,必须是“参与者”安全组的成员或具有相应的权限。
  • 要参与 PR,必须是“读取者”安全组的成员或具有相应的权限。
  • 要查看或评审 PR,必须是 Azure DevOps 项目的成员,具有基本访问级别或更高级别。 如果你不是项目成员,请添加为成员

检查合并更改

完成 PR 时,Git 将新的合并提交添加到主分支的末尾。 此合并提交链接了主分支和 PR 源分支的早期历史记录。 要查看预览合并提交并检查合并冲突,请选择 PR 的“概述”页右上角的“更多选项”菜单,然后选择“查看合并变更”。

如果在创建 PR 后更改了目标分支,请选择“重启合并”以创建新的预览合并提交并更新合并更改差异视图。

显示 PR 的“更多选项”菜单中的“查看合并”和“重启合并”选项的屏幕截图。

评审分支策略

团队可以设置分支策略,要求受保护分支中的 PR 满足特定条件,然后 PR 才能合并。 可以查看对 PR 生效的分支策略、合并是否需要这些策略,以及 PR 是通过还是失败。

PR 的“概述”选项卡汇总了通过或失败的 PR 分支策略。 概述仅列出失败的策略,但可以通过选择“查看 <n> 检查”来查看所有策略检查。

在 PR 的“概述”页上,分支策略要求有一个 图标。 选择要求旁边的“更多选项”,然后选择“查看策略”,转到“项目设置”中分支的“分支策略”页。

显示 PR 中一个分支策略要求旁边的“查看策略”的屏幕截图。

完成拉取请求

解决了任何合并冲突,并且 PR 满足所有分支策略且具有所有必需的审批后,可完成 PR。

  1. 选择右上角的“完成”以完成 PR。 或者,选择“完成”按钮旁边的下拉箭头,然后选择其中一个选项。

    显示 PR 的“完成”按钮选项的屏幕截图。

    • 完成:立即完成 PR,并将更改合并到目标分支。
    • 设置自动完成:将 PR 配置为在满足所有必需的分支策略后完成并合并。
    • 标记为草稿:将 PR 返回到草稿状态并删除所有投票。
    • 放弃:关闭 PR 而不合并更改。
  2. 在“完成拉取请求”窗格中的“合并类型”下,选择其中一个合并选项。

    显示“完成 PR”对话框的屏幕截图。

    • 合并(非快进):与保留所有提交的非线性历史记录合并。
    • 对提交进行 Squash:与线性历史记录合并,该历史记录将所有源提交合并到目标上的单个提交中或对 PR 进行 Squash 合并。 请注意,将为目标分支创建新提交,而不保留源分支中的提交历史记录。
    • 变基和快进:将源提交变基到目标上并快进。
    • 半线性合并:将源提交变基到目标上并创建双父合并。

    注意

    强制实施现有策略。 例如,如果分支当前有一个“仅 Squash 合并”策略,则必须更改该策略才能使用其他合并类型。

  3. 选择以下任一完成后选项。 某些选项不适用于某些合并类型。

    • 合并后完成关联的工作项:完成任何链接的工作项。
    • 合并后删除 <分支名称>:在合并后删除 PR 的源分支。
    • 自定义合并提交消息:添加自定义合并提交消息。 如果选择此选项,请更新合并提交消息。
    • 替代分支策略并启用合并。 即使 PR 不满足所有分支策略,也强制进行合并。 仅当你具有“免除策略强制实施”权限时,此选项才可用。
  4. 选择“完成合并”。

  1. 选择右上角的“完成”以完成 PR。 或者,选择“完成”按钮旁边的下拉箭头,然后选择以下选项之一:

    显示 PR 的“完成”按钮选项的屏幕截图。

    • 完成:立即完成 PR,并将更改合并到目标分支。
    • 设置自动完成:如果你有分支策略,将 PR 配置为在满足所有必需的分支策略后完成并合并。
    • 放弃:关闭 PR 而不合并更改。
  2. 在“完成拉取请求”屏幕上,输入合并提交的消息并更新 PR 说明。

    “完成拉取请求”对话框

  3. 选择以下任何选项:

    • 合并后完成链接的工作项,用于完成任何链接的工作项。

    • 合并后删除 <branch name>,用于从 PR 中删除源分支。

    • 合并时对更改进行 Squash,用于对 PR 进行 Squash 合并。 请注意,将为目标分支创建新提交,而不保留源分支中的提交历史记录。

    • 替代分支策略并启用合并,用于强制分支进行合并(即使它不满足所有分支策略)。 仅当你具有“免除策略强制实施”权限时,此选项才可用。

      注意

      仍会强制实施现有策略。 例如,如果分支当前有一个“仅 Squash 合并”策略,则必须编辑该策略才能使用其他合并类型。

  4. 选择“完成合并”。

完成合并后,任何链接的工作项都会自动更新以显示 PR 完成。

显示已完成 PR 的链接工作项的屏幕截图。

PR 完成期间变基

在某些情况下,在 PR 完成期间无法变基:

  • 如果目标分支上的策略禁止使用变基策略,则需要“替代分支策略”权限才能变基。
  • 如果 PR 源分支有策略,则无法将其变基。 变基将在不经过策略审批过程的情况下修改源分支。
  • 如果使用合并冲突扩展来解决合并冲突,则无法变基。 在单独对所有 PR 提交进行变基时,应用于三向合并的冲突解决方法很少成功或有效。

在所有这些情况下,仍可以在本地对分进行变基,然后向上游推送,或者在完成 PR 时对更改进行 Squash 合并。

多个合并基本问题

在某些情况下,一个 PR 有多个真正的合并库,这种情况可能会导致安全问题。 如果 PR 中的文件在合并库之间具有不同的版本,则会出现多个合并库警告。 有关详细信息和修正方法,请参阅多个合并库

解决合并冲突

分支中的文件更改可能会与其他分支中的更改冲突。 如果不清楚如何合并更改,Git 将在 PR 的“概述”页上显示冲突的文件。 必须先解决 PR 分支与目标分支之间的任何合并冲突,然后才能合并 PR 或将 PR 设置为自动完成。 有关解决合并冲突的说明,请参阅解决合并冲突

显示 PR 的“概述”选项卡上的合并冲突的屏幕截图。

将拉取请求设置为自动完成

从“完成”下拉列表中选择“设置自动完成”,在条件满足所有分支策略后立即完成并合并 PR 更改。 PR 完成后,你会收到电子邮件通知。 如果冲突或错误阻止 PR 完成,电子邮件将通知你该问题。

注意

当你有分支策略时,“设置自动完成”选项在 Azure Repos 和 TFS 2017 及更高版本中可用。 如果未看到“设置自动完成”,则你没有任何分支策略。 有关详细信息,请参阅分支策略

默认情况下,设置为自动完成的 PR 只等待必需的策略。 在“启用自动完成”面板中,你也可以选择等待可选策略。

显示“启用自动完成”面板中将可选策略更改为必需策略的屏幕截图。

从 TFS 2018 Update 2 开始,PR 的“概述”页显示 PR 正在等待的未完成策略条件的列表。 如果在“启用自动完成”面板中将一个策略设置为必需,则可以在“概述”页上将其重新设置为可选。

选择“取消自动完成”以关闭自动完成。

处于自动完成状态的 PR 的屏幕截图。

处于自动完成状态的 PR 的屏幕截图。

设置为自动完成的 PR 会在“拉取请求”页上显示“自动完成”标记。

显示 PR 列表中的一个自动完成 PR 的屏幕截图。

放弃或重新激活拉取请求

要放弃更改和 PR 而不合并,请从“完成”按钮上的下拉列表中选择“放弃”。 你仍然可以查看已放弃的 PR,并且它与工作项保持链接。

要随时重新激活已放弃的 PR,请从“拉取请求”视图中的“已放弃”选项卡打开 PR,选择右上角的“重新激活”。

还原已完成的拉取请求

要撤消 PR 中的更改,请执行以下步骤。 有关详细信息,请参阅撤消更改

  1. 打开已完成的 PR,选择“还原”。 此操作会创建一个新分支,其中包含撤消存储库中现有目标分支中的 PR 的更改。

  2. 在“还原拉取请求”窗格中:

    1. 在“目标分支”下,选择要撤消 PR 更改的分支。
    2. 在“需要主题分支名称”下,根据需要还原 PR 分支名称。
    3. 选择“还原”。
  3. 在“新建拉取请求”屏幕上,选择“创建”。

  4. 合并新 PR 以完成还原。

注意

在此还原期间创建的分支具有单个提交,用于从原始 PR 还原所有文件更改。 对于原始 PR 中的每个提交,分支不包含还原的提交。

后续步骤