Lesstep
Azure DevOps Services・Azure DevOps Server・プルリク・2026年11月2日

Azure DevOps でプルリクを完了してもソース ブランチが消えない

Azure DevOps がプルリクエストのソース ブランチを完了と一緒に消すのは、そう指定したときだけです。消すときの決まりは、ふつうにブランチを削除するときと同じです。ブランチが残るのは、たいてい次のどれかです。削除の指定が無かった、そのブランチの Force push の権限が無い、ブランチに必須のポリシーがある、既定のブランチかロック中、あるいは Azure DevOps からは消えていて手元の Git にだけ残っている。以下は Microsoft の pull request を完了、破棄、または元に戻す、Git ブランチの削除、Git ブランチのセキュリティとアクセス許可を設定するをもとにしています。

完了のときに指定する

PATCH https://dev.azure.com/{organization}/{project}/_apis/git/repositories/{repositoryId}/pullrequests/21?api-version=7.1
{
  "status": "completed",
  "lastMergeSourceCommit": { "commitId": "<レビューしたときのソース ブランチの先頭>" },
  "completionOptions": { "deleteSourceBranch": true, "mergeStrategy": "squash" }
}

その先頭を読んだ後にソース ブランチへ新しいコミットが入っていると、Azure DevOps は TF401192 で完了を断ります。マージも削除も行われません。

ブランチを消せなくなる条件

Microsoft の「Git ブランチの削除」は、リモートのブランチを消す前に要るものを挙げています。Web の画面でも Visual Studio でもコマンドでも同じです。

確かめる順番

  1. Azure DevOps から消えているか:Repos > Branches を見ます。そこに無ければ、手元の Git にリモート追跡の写しが残っているだけです。git fetch --prune で、サーバーに無くなったブランチの写しが消えます。
  2. 削除を指定したか:完了したプルリクの REST API の completionOptions に、完了したときの指定が残っています。
  3. 上の4つの条件:Microsoft は、「ブランチの削除」が出ないときは、実際に効いている Force push の権限と、必須のポリシー・既定のブランチ・ロックのどれにも当たらないことを確かめるよう書いています。
  4. 手で消す:Repos > Branches でそのブランチの「その他のオプション」から「ブランチの削除」を選ぶか、git push origin --delete feature/login。どちらも、そのブランチで Force push を持つ人が行います。

IntelliJ IDEA と Rider で

Azure DevOps Pull Requests は、Lesstep が作っている JetBrains IDE(2024.1 以降)と Android Studio のプラグインです。Azure DevOps Services と Azure DevOps Server のプルリクエストを IDE のツールウィンドウに並べます。完了の画面に「マージ後に {ブランチ} を削除」があり、最初の状態は一度決めておく設定(完了後にソース ブランチを削除)に従います。完了でも自動完了でも毎回 deleteSourceBranch を送るので、既定の値まかせになりません。完了は画面に出したソースのコミットで行うため、見ていない新しいコミットはマージされません。ブランチを消せるかどうかは、上の4つの条件で Azure DevOps が決めます。完了は有料の機能で、30日間の無料試用があります。レビューの一覧・差分・ブランチ ポリシーを見るのは無料のままです。

JetBrains Marketplace で入れる

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

ほかに:マージ方法 · 自動完了 · TF402455 · Bitbucket の場合 · English