Azure DevOps の「This pull request requires an explicit override to bypass policies that aren't currently passing.」
「いま通っていないポリシーを無視するには、明示的な上書きが要る」という意味です。プルリクエストにもトークンにも問題はありません。ターゲット ブランチのポリシー(必須のレビュアーやビルドなど)がまだ通っておらず、いま完了するとそれを飛ばすことになります。要求がはっきりポリシーの無視を求め、アカウントにその許可がある時を除き、Azure DevOps は完了を HTTP 403 で断ります。
答えの全体
2019年〜2026年5月の公開の報告が引いている形です。REST API、Azure CLI、プルリクエストを自分でマージする道具から出ます:
HTTP/1.1 403 Forbidden
{"$id":"1","innerException":null,"message":"This pull request requires an explicit override to bypass policies that aren't currently passing.","typeName":"Microsoft.TeamFoundation.Git.Server.GitPullRequestUpdateRejectedByPolicyException, Microsoft.TeamFoundation.Git.Server","typeKey":"GitPullRequestUpdateRejectedByPolicyException","errorCode":0,"eventId":3000}
- Azure CLI はメッセージだけを出します。たとえば
az repos pr completeの後です(2019年)。 - 同じ例外が
The pull request needs to be approved by all required reviewers before it can be completed.(必須のレビュアー全員の承認が要る)と一緒に返ることもあります(レビューのボットの自動マージ、2026年5月)。 - ブランチのマージの種類のポリシーが認めていない種類で完了しようとした時にも出ます。ブランチが認める唯一の種類(semi-linear merge)を送れなかった道具が、完了のたびに断られていました(2026年5月)。
- 403 ですが、トークンを作り直しても通りません。道具は
GitPullRequestUpdateRejectedByPolicyExceptionで見分けています。メッセージの言語が変わっても同じです。
どのポリシーが通っていないかを見る
- Web で:プルリクエストの Overview に、必須と任意のチェックが状態つきで並びます(レビュアー・ビルド・作業項目のリンク・コメントの解決・マージの種類)。
- REST API で:
GET …/<プロジェクト>/_apis/policy/evaluations?artifactId=vstfs:///CodeReview/CodeReviewId/<プロジェクトの ID>/<プルリクエストの番号>&api-version=7.1-preview.1の答えに、ポリシーごとのstatus(approved・running・queued・rejectedなど)が入っています。
どうするか
- ポリシーを通す:必須のレビュアーに承認を頼む、失敗したビルドをもう一度走らせる、作業項目をリンクする、コメントを解決する。一覧に出ている物をそろえます。
- 自分で完了させる:自動完了をオンにすると、必須のポリシーが全部通った時に Azure DevOps が完了させます。Web では Set auto-complete、Azure CLI では
az repos pr update --id <id> --auto-complete trueです。後者は任意のポリシーまで待つことがあります(自動完了と任意のポリシー)。 - 認められたマージの種類を選ぶ:ブランチがマージの種類を絞っていたら、認められた種類で完了します(マージの種類と Limit merge types)。
- 許可があれば上書きする:Web では完了の時に Override branch policies and enable merge にチェックを入れ、Azure CLI では
az repos pr update --id <id> --status completed --bypass-policy true --bypass-policy-reason "<理由>"です。どちらもリポジトリの許可 Bypass policies when completing pull requests が要ります(Microsoft の完了のページでは Exempt from policy enforcement と書かれています)。(Microsoft:プルリクエストを完了する) - スクリプトやボットでは、
"status": "completed"を送る同じ要求のcompletionOptionsに、"bypassPolicy": trueとbypassReasonを入れ、トークンかパイプラインの ID にその許可を与えます。許可が無ければ 403 のままです。Azure CLI は以前、この設定をプルリクエストに持ちながら完了の要求には送っておらず、2019年に直るまでこのメッセージで止まっていました。
IntelliJ IDEA と Rider で Azure DevOps のプルリクエストを
Azure DevOps Pull Requests は、Lesstep が作っている JetBrains IDE(2024.1 以降)と Android Studio のプラグインです。組織・プロジェクト・リポジトリを git のリモートから読み、自分のレビューを待っているプルリクエストを IDE のツールウィンドウに並べます。Azure DevOps Services でも Azure DevOps Server でも使えます。プルリクエストのブランチのポリシーを状態つきで見せ、失敗したビルドをもう一度走らせられます。必須のポリシーが通っていない時は、完了の画面が先に自動完了を勧めます。1.0.41 からは、それでも完了がこの形で断られた時、トークンではなくブランチのポリシーに断られたことを出し、自動完了と Bypass の許可を案内します。レビューの受け箱は無料、投票・コメント・完了・作成は Pro(30日間の無料試用つき)です。画面は日本語です。
Azure DevOps は Microsoft Corporation の商標、IntelliJ IDEA と Rider は JetBrains s.r.o. の商標です。このページは Microsoft・JetBrains のいずれとも提携しておらず、承認も受けていません。
ほかに:TF401181:もう完了か破棄されている · TF401027:Git の許可が無い · TF402455:このブランチへの push は許可されていない · 承認が数えられない理由 · English