Bitbucket Data Center の「You are attempting to modify a pull request based on out-of-date information」
「古い情報をもとにプルリクエストを変更しようとしている」という意味です。Bitbucket Data Center(旧 Bitbucket Server)はプルリクエストごとに版の番号を持ち、マージや却下などの変更は、もとにした版を名指しします。その後にプルリクエストが更新されていると、Bitbucket は、頼んだ人が見ていないものに変更を当てるかわりに、この文で断ります。権限の問題でも、マージの競合でもありません。何が変わったかを見てから、プルリクエストを読み直して同じ操作をやり直すのが普通の直し方です。
答えの形
HTTP/1.1 409 Conflict
Content-Type: application/json
{"errors": [{"message": "You are attempting to modify a pull request based on out-of-date information.",
"exceptionName": "com.atlassian.bitbucket.pull.PullRequestOutOfDateException",
"currentVersion": 14, "expectedVersion": 12, ...}]}
currentVersionはサーバーにあるプルリクエストの版、expectedVersionはリクエストが名指しした版です。上の数字は公開の不具合報告(BSERV-11108)のものです。Atlassian のナレッジベースの記事ではexpectedVersionが -1 で、クラスは古い名前のcom.atlassian.stash.pull.PullRequestOutOfDateExceptionです。- Atlassian の REST API の定義(Bitbucket 9.4)は、マージ(「The specified version is out of date」)と却下(「has been updated since the version specified by the request」)で、これを 409 としています。Atlassian の API リファレンスは、この例外を「PullRequest の版が古いときに投げられる」と説明しています。
- ここでは再現していません(Data Center のサーバーを持っていないため)。本文は、報告が引いている部分を Bitbucket のエラーの形で示したものです。
起きる場面
- 版を送らないスクリプト。REST API の
versionは省くと -1 になり、どのプルリクエストにも合いません。Atlassian のナレッジベースの記事 Bitbucket Server REST API for merging Pull Request fails(英語)は、POST …/mergeが断られる原因をこれとしています。 - Web の画面で続けて操作したとき。BSERV-20504(2026年7月・Bitbucket 9.4.22・10.2.5・10.4.1):自分をレビュアーに足し、承認し、マージする、をすばやく続けると、この文で終わります。Atlassian の回避策は、プルリクエストを読み直してからもう一度マージすることです。
- 2回続けて却下したとき。BSERV-11108(2018年・Bitbucket 5.12・5.13):却下し、開き直し、もう一度却下する。回避策はページの読み直しです。
- ほかの人が更新したとき。作成者やほかのレビュアー、ツールが、あなたが開いた後にプルリクエスト(タイトル・説明・レビュアーなど)を変えると、古い版をもとにした変更は断られます。
どうするか
- ブラウザーでは:プルリクエストを読み直し、何が変わったかを見てから、同じ操作をやり直します。
- スクリプトでは:先にプルリクエストを読み(
GET /rest/api/latest/projects/{project}/repos/{repo}/pull-requests/{id})、そのversionを送ります。POST …/merge?version=N、…/declineと…/reopenも同じです。API の文書は、操作の前にサーバーからプルリクエストを取得し、versionの値を見るように書いています。 - 読んだばかりの版でマージする前に、それが確かめたときのプルリクエストのままかを見てください。マージの直前に読んだ版は、プルリクエストがどう変わっていても版の確認を通ってしまいます。
fromRef.latestCommitを、レビューやビルドがもとにしたコミットと比べます。 - 承認では、API の定義は
PUT …/participants/{userSlug}のversionを非推奨とし、かわりに最後にレビューしたコミットを本文で送るように書いています(lastReviewedCommit)。そのときプルリクエストが「指定した最後にレビューしたコミットより後に更新されている」と、Bitbucket は 409 で答えます。
IntelliJ IDEA で Bitbucket のプルリクエストを
Pull Request Inbox for Bitbucket は、Lesstep が作っている JetBrains IDE(2024.1 以降)のプラグインです。自分のレビューを待っているプルリクエストを IDE のツールウィンドウに並べます。Bitbucket Cloud と、ベータ版として Bitbucket Data Center 8.9 以降に対応し、Data Center には個人の HTTP アクセス トークンで、そのサーバーにだけ送ります。Data Center では、承認・却下・マージの直前にプルリクエストを読み、その版を送ります。版だけでは止まりません。1.0.28(マージ)と 1.0.29(承認)からは、ソース ブランチの最新のコミットを画面のものと比べ、開いた後に新しいコミットが入っていたら、マージも承認もせずに、それを入れて読み直します。1.0.30 からは、開いた後の push で変わったファイルへの行コメントも付けません。レビューの受け箱・差分・議論は無料、承認・コメント・マージは Pro(月 US$1.50・30日間の無料試用つき)です。画面は日本語です。
Bitbucket と Atlassian は Atlassian の商標、IntelliJ IDEA は JetBrains s.r.o. の商標です。このページは Atlassian・JetBrains のいずれとも提携しておらず、承認も受けていません。
ほかに:You are not permitted to access this resource(Data Center) · Bitbucket の差分の上限 · IntelliJ IDEA で使える Bitbucket のプルリクエストのプラグインの比較 · English