完成、放弃或还原拉取请求
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 分支策略。 概述仅列出失败的策略,但可以通过选择“查看 <n> 检查”来查看所有策略检查。
在 PR 的“概述”页上,分支策略要求有一个 图标。 选择要求旁边的“更多选项”,然后选择“查看策略”,转到“项目设置”中分支的“分支策略”页。
可以在 Visual Studio 中打开 PR,然后按照“浏览器”选项卡中所述查看分支策略。
要在 Visual Studio 中打开 PR,请在“Git”菜单中选择“<你的 Git 服务>”>“查看拉取请求”,然后选择一个拉取请求将其打开。
Visual Studio 2019 版本 16.8 及更高版本提供 Git 版本控制体验,同时保留团队资源管理器 Git 用户界面。 要使用团队资源管理器,请取消选中菜单栏中的工具>选项>预览功能>新 Git 用户体验。 可以互换使用任一界面中的 Git 功能。
从 Visual Studio 团队资源管理器访问 PR:
从 Visual Studio 连接到项目。
选择“查看”>“团队资源管理器”,打开团队资源管理器。 还可按 Ctrl+\、Ctrl+M。
从“主页”中选择“拉取请求”,查看由你打开或分配给你的 PR 列表。
要在 Web 门户中打开 PR 并查看生效的策略,请右键单击该 PR,选择“在浏览器中打开”。
要查看对 PR 生效的所有分支策略,请将 az repos pr policy list 与所需的 id
参数一起使用。
az repos pr policy list --id
[--detect {false, true}]
[--org]
[--query-examples]
[--skip]
[--subscription]
[--top]
参数
参数 |
说明 |
--id |
拉取请求的 ID。 必填。 |
--detect |
自动检测组织。 接受的值:false 、true 。 |
--org
--organization |
Azure DevOps 组织 URL。 可以使用 az devops configure -d organization=<ORG_URL> 配置默认组织。 如果未配置为默认或未通过 git 配置选取,则为必需。示例:https://dev.azure.com/MyOrganizationName/ 。 |
--query-examples |
建议的 JMESPath 字符串。 可以复制其中一个查询,并将其粘贴到 --query 参数后,置于双引号中,以查看结果。 可以添加一个或多个位置关键字,以便根据这些关键字提供建议。 |
--skip |
要跳过的策略数。 |
--subscription |
订阅的名称或 ID。 可以使用 az account set -s <NAME_OR_ID> 配置默认订阅。 |
--top |
要列出的最大策略数。 |
示例
例如,要查看对 PR #28 生效的策略,请运行以下命令:
az repos pr policy list --id 28 --output table
Evaluation ID Policy Blocking Status Expired Build ID
------------------------------------ --------------------------------------------- ---------- -------- --------- ----------
84e7ca6d-0b42-4819-9f62-f41df5e319f3 Minimum number of reviewers (1) True Approved
1ba061d8-9e9f-401b-ab61-e2ed1c200aba Required reviewers (1) True
37620a4b-adc4-483d-9ca2-3f4e6ffe2990 Comment requirements False Approved
34b7cae8-812a-4c14-9229-f71a0e662e8b Required reviewers (1) ([Fabrikam Fiber]\Web) False
a6e4380e-9f38-4aa5-863c-0fc496027362 Work item linking False Rejected
Azure DevOps Server 不支持 Azure DevOps CLI 命令。
完成拉取请求
解决了任何合并冲突,并且 PR 满足所有分支策略且具有所有必需的审批后,可完成 PR。
选择右上角的“完成”以完成 PR。 或者,选择“完成”按钮旁边的下拉箭头,然后选择其中一个选项。
- 完成:立即完成 PR,并将更改合并到目标分支。
- 设置自动完成:将 PR 配置为在满足所有必需的分支策略后完成并合并。
- 标记为草稿:将 PR 返回到草稿状态并删除所有投票。
- 放弃:关闭 PR 而不合并更改。
在“完成拉取请求”窗格中的“合并类型”下,选择其中一个合并选项。
- 合并(非快进):与保留所有提交的非线性历史记录合并。
- 对提交进行 Squash:与线性历史记录合并,该历史记录将所有源提交合并到目标上的单个提交中或对 PR 进行 Squash 合并。 请注意,将为目标分支创建新提交,而不保留源分支中的提交历史记录。
- 变基和快进:将源提交变基到目标上并快进。
- 半线性合并:将源提交变基到目标上并创建双父合并。
注意
强制实施现有策略。 例如,如果分支当前有一个“仅 Squash 合并”策略,则必须更改该策略才能使用其他合并类型。
选择以下任一完成后选项。 某些选项不适用于某些合并类型。
- 合并后完成关联的工作项:完成任何链接的工作项。
- 合并后删除 <分支名称>:在合并后删除 PR 的源分支。
- 自定义合并提交消息:添加自定义合并提交消息。 如果选择此选项,请更新合并提交消息。
- 替代分支策略并启用合并。 即使 PR 不满足所有分支策略,也强制进行合并。 仅当你具有“免除策略强制实施”权限时,此选项才可用。
选择“完成合并”。
选择右上角的“完成”以完成 PR。 或者,选择“完成”按钮旁边的下拉箭头,然后选择以下选项之一:
- 完成:立即完成 PR,并将更改合并到目标分支。
- 设置自动完成:如果你有分支策略,将 PR 配置为在满足所有必需的分支策略后完成并合并。
- 放弃:关闭 PR 而不合并更改。
在“完成拉取请求”屏幕上,输入合并提交的消息并更新 PR 说明。
选择以下任何选项:
合并后完成链接的工作项,用于完成任何链接的工作项。
合并后删除 <branch name>
,用于从 PR 中删除源分支。
合并时对更改进行 Squash,用于对 PR 进行 Squash 合并。 请注意,将为目标分支创建新提交,而不保留源分支中的提交历史记录。
替代分支策略并启用合并,用于强制分支进行合并(即使它不满足所有分支策略)。 仅当你具有“免除策略强制实施”权限时,此选项才可用。
注意
仍会强制实施现有策略。 例如,如果分支当前有一个“仅 Squash 合并”策略,则必须编辑该策略才能使用其他合并类型。
选择“完成合并”。
完成合并后,任何链接的工作项都会自动更新以显示 PR 完成。
要完成 PR,请在浏览器中打开 PR,然后在“概述”页上选择“完成”或设置其他选项。
要在 Visual Studio 中打开 PR,请在“Git”菜单中选择“<你的 Git 服务>”>“查看拉取请求”,然后选择一个拉取请求将其打开。
从 Visual Studio 2019 团队资源管理器访问 PR:
从 Visual Studio 连接到项目。
选择“查看”>“团队资源管理器”,打开团队资源管理器。 还可按 Ctrl+\、Ctrl+M。
从“主页”中选择“拉取请求”,查看由你打开或分配给你的 PR 列表。
要在 Web 门户中打开 PR,请右键单击该 PR,选择“在浏览器中打开”。
要完成 PR 并合并更改,请使用 az repos pr update 将 PR --status
更新为 completed
。
例如,要完成 PR #21,请使用:
az repos pr update --id 21 --status completed
设置完成选项
可在使用 az repos pr create
创建 PR 时设置 PR 完成选项,或使用 az repos pr update
更新现有 PR 中的创建选项。
PR 完成选项包括:
bypass-policy {false, true}
:是否在可以合并拉取请求后绕过任何必需的策略并完成拉取请求。
bypass-policy-reason
:绕过必需的策略的原因。
delete-source-branch {false, true}
:是否在拉取请求完成并合并后删除源分支。
merge-commit-message
:自定义合并提交消息。
squash {false, true}
:是否将源提交 Squash 为单个目标提交以进行合并。
transition-work-items {false, true}
:是否在 PR 合并时解析链接的工作项。
要设置完成选项并完成现有 PR,请将 az repos pr update
与必需的 id
参数一起使用。
az repos pr update --id
[--auto-complete {false, true}]
[--bypass-policy {false, true}]
[--bypass-policy-reason]
[--delete-source-branch {false, true}]
[--description]
[--detect {false, true}]
[--draft {false, true}]
[--merge-commit-message]
[--org]
[--squash {false, true}]
[--status {abandoned, active, completed}]
[--subscription]
[--title]
[--transition-work-items {false, true}]
参数
参数 |
说明 |
--id |
拉取请求的 ID。 “必需”。 |
--auto-complete |
将拉取请求设置为在所有策略已通过且源分支可合并到目标分支时自动完成。 接受的值:false 、true 。 |
--bypass-policy |
在可以合并拉取请求后绕过任何必需的策略并完成拉取请求。 接受的值:false 、true 。 |
--bypass-policy-reason |
绕过必需的策略的原因。 |
--delete-source-branch |
完成拉取请求并将其合并到目标分支后,删除源分支。 接受的值:false 、true 。 |
--description -d |
拉取请求的新说明。 可以包含 Markdown。 每个值都是新行。 例如:--description "First Line" "Second Line" 。 |
--detect |
自动检测组织。 接受的值:false 、true 。 |
--draft |
将 PR 转换为草稿模式或发布它。 接受的值:false 、true 。 |
--merge-commit-message |
合并提交时要显示的消息。 |
--org
--organization |
Azure DevOps 组织 URL。 可以使用 az devops configure -d organization=<ORG_URL> 配置默认组织。 如果未配置为默认或未通过 git 配置选取,则为必需。示例:https://dev.azure.com/MyOrganizationName/ 。 |
--squash |
合并到目标分支时,对源分支中的提交执行 Squash 操作。 接受的值:false 、true 。 |
--status |
设置拉取请求的新状态。 接受的值:abandoned 、active 、completed 。 |
--subscription |
订阅的名称或 ID。 可以使用 az account set -s <NAME_OR_ID> 配置默认订阅。 |
--title |
拉取请求的新标题。 |
--transition-work-items |
将链接到拉取请求的任何工作项转换为下一个逻辑状态,例如“已解决”。 接受的值:false 、true 。 |
示例
以下示例完成 PR #21、删除其源分支、解析其链接的工作项并添加合并提交消息:
az repos pr update --id 21 --status completed --delete-source-branch true --transition-work-items true --merge-commit-message "This update is complete."
Azure DevOps Server 不支持 Azure DevOps CLI 命令。
PR 完成期间变基
在某些情况下,在 PR 完成期间无法变基:
- 如果目标分支上的策略禁止使用变基策略,则需要“替代分支策略”权限才能变基。
- 如果 PR 源分支有策略,则无法将其变基。 变基将在不经过策略审批过程的情况下修改源分支。
- 如果使用合并冲突扩展来解决合并冲突,则无法变基。 在单独对所有 PR 提交进行变基时,应用于三向合并的冲突解决方法很少成功或有效。
在所有这些情况下,仍可以在本地对分进行变基,然后向上游推送,或者在完成 PR 时对更改进行 Squash 合并。
多个合并基本问题
在某些情况下,一个 PR 有多个真正的合并库,这种情况可能会导致安全问题。 如果 PR 中的文件在合并库之间具有不同的版本,则会出现多个合并库警告。 有关详细信息和修正方法,请参阅多个合并库。
解决合并冲突
分支中的文件更改可能会与其他分支中的更改冲突。 如果不清楚如何合并更改,Git 将在 PR 的“概述”页上显示冲突的文件。 必须先解决 PR 分支与目标分支之间的任何合并冲突,然后才能合并 PR 或将 PR 设置为自动完成。 有关解决合并冲突的说明,请参阅解决合并冲突。
将拉取请求设置为自动完成
从“完成”下拉列表中选择“设置自动完成”,在条件满足所有分支策略后立即完成并合并 PR 更改。 PR 完成后,你会收到电子邮件通知。 如果冲突或错误阻止 PR 完成,电子邮件将通知你该问题。
注意
当你有分支策略时,“设置自动完成”选项在 Azure Repos 和 TFS 2017 及更高版本中可用。 如果未看到“设置自动完成”,则你没有任何分支策略。 有关详细信息,请参阅分支策略。
默认情况下,设置为自动完成的 PR 只等待必需的策略。 在“启用自动完成”面板中,你也可以选择等待可选策略。
从 TFS 2018 Update 2 开始,PR 的“概述”页显示 PR 正在等待的未完成策略条件的列表。 如果在“启用自动完成”面板中将一个策略设置为必需,则可以在“概述”页上将其重新设置为可选。
选择“取消自动完成”以关闭自动完成。
设置为自动完成的 PR 会在“拉取请求”页上显示“自动完成”标记。
在 Web 门户中打开拉取请求。 在“概述”页上,选择“设置自动完成”。
要在 Visual Studio 中打开 PR,请在“Git”菜单中选择“<你的 Git 服务>”>“查看拉取请求”,然后选择一个拉取请求将其打开。
从 Visual Studio 2019 团队资源管理器访问 PR:
从 Visual Studio 连接到项目。
选择“查看”>“团队资源管理器”,打开团队资源管理器。 还可按 Ctrl+\、Ctrl+M。
从“主页”中选择“拉取请求”,查看由你打开或分配给你的 PR 列表。
要在 Web 门户中打开 PR 并查看生效的策略,请右键单击该 PR,选择“在浏览器中打开”。
设置自动完成以在 PR 通过所有必需的审批和分支策略时自动完成 PR。 可以在创建 PR 时设置自动完成,或更新现有 PR。
- 要在创建 PR 时设置自动完成,请使用
az repos pr create --auto-complete true
。
- 要将现有 PR 更新为自动完成,请使用
az repos pr update --id <PR Id> --auto-complete true
。
Azure DevOps Server 不支持 Azure DevOps CLI 命令。
放弃或重新激活拉取请求
要放弃更改和 PR 而不合并,请从“完成”按钮上的下拉列表中选择“放弃”。 你仍然可以查看已放弃的 PR,并且它与工作项保持链接。
要随时重新激活已放弃的 PR,请从“拉取请求”视图中的“已放弃”选项卡打开 PR,选择右上角的“重新激活”。
在 Web 门户中打开拉取请求。 在“概述”页上,选择“放弃”。
要在 Web 门户中打开 PR,请使用完成拉取请求中的过程。
要放弃 PR 而不合并更改,请使用 az repos pr update --id <PR Id> –-status abandoned
。 可以通过将状态设置为 active
来重新激活 PR。
Azure DevOps Server 不支持 Azure DevOps CLI 命令。
还原已完成的拉取请求
要撤消 PR 中的更改,请执行以下步骤。 有关详细信息,请参阅撤消更改。
打开已完成的 PR,选择“还原”。 此操作会创建一个新分支,其中包含撤消存储库中现有目标分支中的 PR 的更改。
在“还原拉取请求”窗格中:
- 在“目标分支”下,选择要撤消 PR 更改的分支。
- 在“需要主题分支名称”下,根据需要还原 PR 分支名称。
- 选择“还原”。
在“新建拉取请求”屏幕上,选择“创建”。
合并新 PR 以完成还原。
注意
在此还原期间创建的分支具有单个提交,用于从原始 PR 还原所有文件更改。 对于原始 PR 中的每个提交,分支不包含还原的提交。
后续步骤
相关文章