Azure DevOps の「TF401181: The pull request cannot be edited due to its state.」
「この状態のプルリクエストは変えられない」という意味で、プルリクエストがもうアクティブではない(完了か破棄された)ことを指します。そこから先は、投票も、破棄や説明の書き換えのような変更も断られます。よくある原因は時間差です。使っているページや道具が読み込んだ後に、ほかの人が完了させた、最後のポリシーが通って自動完了がマージした、自分が別のタブで閉じた、のどれかです。
答えの全体
2021年〜2026年8月の公開の報告が引いている形です。REST API、依存関係を更新するパイプライン、レビューの道具から出ます:
HTTP/1.1 400 Bad Request
{"$id":"1","innerException":null,"message":"TF401181: The pull request cannot be edited due to its state.","typeName":"Microsoft.TeamFoundation.Git.Server.GitPullRequestNotEditableException, …"}
報告に出てくる要求は次のとおりです:
- 投票(
PUT …/pullrequests/<id>/reviewers/<レビュアー>)を、もうマージされたプルリクエストに送ったとき:Azure DevOps を相手にしたレビューの道具の通しの試験、2026年5月。 - 2回目の破棄(
PATCH …/pullrequests/<id>に"status": "abandoned"):プルリクエストの一覧を一度だけ読み、4分後に同じものをもう一度破棄しようとした、依存関係を更新するパイプライン、2025年7月。 - 完了したプルリクエストの説明の書き換え:後からリンクを足そうとしたデプロイの道具、2026年8月。いまはそのリンクをコメントとして投稿しています。
ここでは再現していません。状態コードと上の要求は、それぞれの報告によります。
誰が、いつ閉じたかを見る
- Web で:プルリクエストを開きます。上に Completed(完了)か Abandoned(破棄)と出ます。一覧では Completed と Abandoned のタブに分かれています。
- Azure CLI で:
az repos pr show --id <id> --query "{status:status, closedBy:closedBy.displayName, closedDate:closedDate}" - REST API で:
GET …/_apis/git/repositories/<リポジトリ>/pullrequests/<id>の答えにstatus・closedBy・closedDateが入っています(dev.azure.com の完了したプルリクエストで3つとも入っていることを、2026年10月24日に確かめました)。autoCompleteSetByがあれば、自動完了がオンでした。
どうするか
- 破棄されていて、作業を続けるなら:再アクティブ化します。Web では Abandoned のタブから開いて Reactivate を選び、Azure CLI では
az repos pr update --id <id> --status activeです。そのあとで、投票や変更をやり直します。(Microsoft:プルリクエストの破棄と再アクティブ化) - 完了していたら:変更はもうマージされていて、プルリクエストは閉じたままです。投票しても意味はありません。さらに足すなら、ブランチに push して新しいプルリクエストを開きます。マージを取り消すなら、完了したプルリクエストを開いて Revert を選ぶと、変更を打ち消すブランチができるので、それで新しいプルリクエストを開きます。(Microsoft:完了したプルリクエストを元に戻す)
- 自動完了で早くマージされてしまったら:自動完了は、必須のポリシーが通るとすぐにマージします。止めておけるのは必須のレビュアーです。必要なら上のとおり Revert します。
- 前に一覧で読んだプルリクエストを変えるパイプラインやスクリプトでは、プルリクエストを読み直し、
statusがactiveでなければ飛ばします。または TF401181(かGitPullRequestNotEditableException)を「もう閉じている」として扱い、実行を失敗にしません。上の依存関係を更新するパイプラインの報告も、まさに「もう破棄されたものは飛ばす」ことを求めていました。
IntelliJ IDEA と Rider で Azure DevOps のプルリクエストを
Azure DevOps Pull Requests は、Lesstep が作っている JetBrains IDE(2024.1 以降)と Android Studio のプラグインです。組織・プロジェクト・リポジトリを git のリモートから読み、自分のレビューを待っているプルリクエストを IDE のツールウィンドウに並べます。Azure DevOps Services でも Azure DevOps Server でも使えます。投票・コメント・完了も IDE から離れずにできます。1.0.40 からは、投票・完了・破棄が TF401181 で断られたとき、プルリクエストが完了か破棄されていたことと、それをした人を出し、一覧を読み直します。レビューの受け箱は無料、投票・コメント・完了・作成は Pro(30日間の無料試用つき)です。画面は日本語です。
Azure DevOps は Microsoft Corporation の商標、IntelliJ IDEA と Rider は JetBrains s.r.o. の商標です。このページは Microsoft・JetBrains のいずれとも提携しておらず、承認も受けていません。
ほかに:TF401179:アクティブなプルリクエストがもうある · TF401027:Git の許可が無い · TF401398:ソースかターゲットのブランチが無い · ブランチのポリシーに断られた完了 · TF401180:プルリクエストが見つからない · TF401192:完了の前に新しいコミットが入った · English