Lesstep
Azure DevOps Services と Server・REST API とパイプラインとレビューの道具・2026年10月24日に確認

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, …"}

報告に出てくる要求は次のとおりです:

ここでは再現していません。状態コードと上の要求は、それぞれの報告によります。

誰が、いつ閉じたかを見る

どうするか

  1. 破棄されていて、作業を続けるなら:再アクティブ化します。Web では Abandoned のタブから開いて Reactivate を選び、Azure CLI では az repos pr update --id <id> --status active です。そのあとで、投票や変更をやり直します。(Microsoft:プルリクエストの破棄と再アクティブ化)
  2. 完了していたら:変更はもうマージされていて、プルリクエストは閉じたままです。投票しても意味はありません。さらに足すなら、ブランチに push して新しいプルリクエストを開きます。マージを取り消すなら、完了したプルリクエストを開いて Revert を選ぶと、変更を打ち消すブランチができるので、それで新しいプルリクエストを開きます。(Microsoft:完了したプルリクエストを元に戻す)
  3. 自動完了で早くマージされてしまったら:自動完了は、必須のポリシーが通るとすぐにマージします。止めておけるのは必須のレビュアーです。必要なら上のとおり Revert します。
  4. 前に一覧で読んだプルリクエストを変えるパイプラインやスクリプトでは、プルリクエストを読み直し、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日間の無料試用つき)です。画面は日本語です。

JetBrains Marketplace で入れる

Azure DevOps は Microsoft Corporation の商標、IntelliJ IDEA と Rider は JetBrains s.r.o. の商標です。このページは Microsoft・JetBrains のいずれとも提携しておらず、承認も受けていません。

ほかに:TF401179:アクティブなプルリクエストがもうある · TF401027:Git の許可が無い · TF401398:ソースかターゲットのブランチが無い · ブランチのポリシーに断られた完了 · TF401180:プルリクエストが見つからない · TF401192:完了の前に新しいコミットが入った · English