GitLab:マージリクエストの一覧が 400 か 404 になる
マージリクエストは、GitLab の REST API の3つの一覧から取ります。プロジェクトの一覧(GET /projects/:id/merge_requests)、グループとそのサブグループの一覧(GET /groups/:id/merge_requests)、インスタンスで見えるものすべての一覧(GET /merge_requests)です。GitLab が問い合わせを断るとき、使えないパラメーターには 400 で理由を error に入れ、見つからないグループには 404 を返します。以下は、2026年10月25日に gitlab.com が返した答えと、その裏にある GitLab の文書の決まりです。
HTTP/1.1 400 Bad Request
{"error":"reviewer_id, reviewer_username are mutually exclusive"}
400:GitLab の文と理由
scope does not have a valid value(和訳:scope の値が正しくありません):scopeがcreated_by_me・assigned_to_me・reviews_for_me・allのどれでもありません。state does not have a valid value(和訳:state の値が正しくありません):stateがopened・closed・locked・merged・allのどれでもありません。order_by does not have a valid valueはorder_by(created_atやupdated_atなど)について同じことです。reviewer_id, reviewer_username are mutually exclusive(和訳:reviewer_id と reviewer_username は同時に使えません)、author_id, author_usernameも同じ:ユーザーは番号かユーザー名のどちらかで指定し、両方は送れません。reviewer_id should be an integer, none, or any, however got …(和訳:reviewer_id は整数・none・any のどれかのはずが、… が来ました):reviewer_idに入るのはユーザーの番号か、None(レビュアーなし)かAny(だれかがレビュアー)です。ユーザー名はreviewer_usernameに入れます。
401 と 404
GET /merge_requestsの 401401 Unauthorized:この一覧は、scope=allが無いと自分が作ったマージリクエストだけを返すので、トークンが無いと GitLab には「自分」がだれかわかりません。トークンなしでscope=allを付けると、gitlab.com は公開のプロジェクトのマージリクエストを返しました。GET /groups/:id/merge_requestsの 404404 Group Not Found:グループが無いか、トークンに見えないか、そもそもグループではありません(ユーザーの個人のネームスペースにはグループの一覧がありません)。また GitLab の API は、プロジェクトと違ってグループの古いパスをたどらないので、グループの名前が変わると、その前に作ったクローンの指すグループは 404 になります(GitLab の 404「Group Not Found」へ)。- プロジェクトの一覧の 404
404 Project Not Found:プロジェクトが無いか、トークンに見えません(住所か権限かへ)。
200 なのにマージリクエストが欠けるとき
scopeなしのGET /merge_requests:自分が作ったものだけです(既定がcreated_by_me)。- グループの一覧は、アーカイブしたプロジェクトを外します:
non_archivedは、falseを送らない限り true です。インスタンス全体の一覧では false です。 - トークンが無ければ、公開のプロジェクトのマージリクエストだけです。
- ページ:1ページ100件まで(
per_page)。10,000件を超えると、GitLab はx-totalとx-total-pagesを付けません。gitlab.com のインスタンス全体の開いているマージリクエストの一覧にも付いていませんでした。代わりにx-next-pageをたどります。
直し方
- 400:値は GitLab の文書にあるとおりに送り、
reviewer_idとreviewer_username(authorの2つも)はどちらか1つだけにする。 - 401:トークンを付けるか、
scope=allを付ける。 - グループの 404:GitLab でプロジェクトのページを開く。住所が別のグループになっていたら、グループの名前が変わったか、プロジェクトが移っています。そのグループで一覧を取り、クローンも
git remote set-urlで新しい住所に向け直す。個人のネームスペースなら、プロジェクトの一覧を使う。
IntelliJ IDEA の「Failed to load merge requests.」「The authorization token was revoked」「… but merge request details loading failed」
IntelliJ IDEA に入っている GitLab の機能は、これらの断りを自分の文に置き換えて出します。ソース(2026年10月30日に確認・IntelliJ IDEA:GitLabMergeRequestErrorUtil.kt・GitLabHttpStatusError.kt・GitLabFiltersPanelFactory.kt・GitLabMergeRequestOnCurrentBranchService.kt・GitLabMergeRequestEditorReviewViewModel.kt・GitLabMergeRequestChanges.kt)では:
- 「Failed to load merge requests.」(マージリクエストを読めなかった)は、一覧の読み込みが失敗したときに見出しとして出て、その下に誤りに応じた1行が付きます。
- 「The authorization token was revoked」(トークンが取り消された)とログインし直す操作は、GitLab の答えに
"error": "invalid_token"があるとき。GitLab は取り消しだけでなく期限切れのトークンにもこれを返す(GitLab の 401「invalid_token」)ので、トークンの期限が切れただけでも「取り消された」と出ます。どちらでも、直し方は新しいトークンです。 - 「HTTP request error」と
errorの値は、ほかのerror付きの答えのとき。たとえばinsufficient_scope(足すスコープ)。 - 「Connection error occurred」(接続できない)はサーバーに届かないとき。ほかの失敗では、その誤り自身の文が出ます。
- 「Failed to load data」と Retry loading data は、絞り込みで人を選ぶ一覧の、ユーザーを読めなかったとき。
- マージリクエストのあるブランチでは、ブランチ名が「!42 on feature」になり、説明は「Merge request !42 exists for current branch feature」です。マージリクエストに手元のブランチにまだ無いコミットがあると 「…, but local branch is out of sync with remote」(手元のブランチがリモートとずれている)、マージリクエストの変更の読み込みが失敗すると 「…, but merge request details loading failed」(詳細を読めなかった)が続きます。IntelliJ IDEA は変更をコミットごとに、コミットとその差分を REST API(
/repository/commits/:shaと/repository/commits/:sha/diff・5件ずつ同時)で読むので、そのどれかが断られるか失敗するとこうなります。GitLab がdiffRefsの無いマージリクエストを返したときも同じです。
IntelliJ IDEA で GitLab のマージリクエストを見るなら
Lesstep の Merge Request Inbox for GitLab は、JetBrains IDE(2024.1 以降)のプラグインです。開いているマージリクエストをこの3つから一覧にします。「開いているプロジェクト」にはプロジェクトの一覧、「そのグループ」にはグループの一覧、「どこでも」には scope=all を付けたインスタンス全体の一覧を使い、「自分のレビュー待ち」「自分がレビュアー」「自分が作成」には reviewer_id か author_id を付けます。トークンが無ければ、公開のプロジェクトの開いているマージリクエストすべてを一覧にして自分で絞る選択は止め、「どこでも」ではトークンを求めます。個人のネームスペースのようにグループが 404 なら、そのプロジェクトのマージリクエストを一覧にします。1.0.16 からは、クローンの後にグループの名前が変わったか、プロジェクトが別のグループへ移ったとき、「そのグループ」は新しいパスでそのグループを一覧にします(前はそのプロジェクトのマージリクエストだけでした)。一覧はそれぞれ最近更新された順に最大200件です。読むのは無料、承認・コメント・マージは Pro(月 US$1.50・30日間の無料試用つき)です。画面は日本語です。
GITLAB は GitLab Inc. の商標、IntelliJ IDEA は JetBrains s.r.o. の商標です。このページは GitLab Inc.・JetBrains のいずれとも提携しておらず、承認も受けていません。
ほかに:GitLab の 404「Project Not Found」 · GitLab の 404「Group Not Found」 · GitLab の 401「invalid_token」 · GitLab の「insufficient_scope」 · GitLab のマージの断り(405・409・422) · GitLab の承認の断り(401・409) · GitLab のコメント・スレッドの断り(400・403) · GitLab のマージリクエストが作れない(409・422・400) · GitLab のリベースの断り・失敗(403・409) · GitLab の自動マージの断り(405)・取り消し · GitLab の MR の変更が欠ける(「1000+」・too_large) · GitLab の 429「Retry later」(回数の上限) · GitLab の「compare_timeout」(差分の上限) · JetBrains の IDE で GitLab のマージリクエストを扱う · English