Lesstep
GitLab・マージリクエスト・作成の API・2026年10月24日に確認

GitLab がマージリクエストを作らなかった理由

API でマージリクエストを作ると(POST /projects/:id/merge_requests に source_branch・target_branch・title)、409・422・400・403 で断られることがあり、GitLab の API の文書にはそれぞれの意味が書いてありません。以下はすべて GitLab のソース(lib/api/merge_requests.rb、lib/api/helpers/merge_requests_helpers.rb の handle_merge_request_errors!、app/models/merge_request.rb の検査と MergeRequests::CreateService)を 2026年10月24日に読んで確かめたものです。

答えの意味

api の権限が無いトークンも 403 で断られますが、そのときの答えには insufficient_scope と書いてあります。足す権限の見つけ方へ。無いプロジェクトや見えないプロジェクトのパスは 404 です。住所か権限かへ。

いまどうなっているか

curl -H "PRIVATE-TOKEN: your-token" "https://gitlab.com/api/v4/projects/group%2Fproject/merge_requests?state=opened&source_branch=feature&target_branch=main"

feature から main への開いているマージリクエストの一覧です。409 が名指ししたものはこの中にあります。GitLab にブランチがあるかは、…/projects/group%2Fproject/repository/branches/feature が無ければ 404 で答えます。gitlab.com はあなたのサーバーの住所に置き換えてください。

直し方

IntelliJ IDEA の「Failed to create merge request」「No changes between …」「Unable to create merge request from … to …」「Commits will be pushed to a protected branch」

IntelliJ IDEA に入っている GitLab の機能の New Merge Request のタブは、作る前に2つのブランチを確かめ、それから上と同じ POST /projects/:id/merge_requests を送ります。ソース(2026年10月30日に確認・IntelliJ IDEA:GitLabMergeRequestCreateViewModel.kt・GitLabMergeRequestCreateStatusComponentFactory.kt・GitLabMergeRequestsApi.kt・GitSharedSettings.java)では:

IntelliJ IDEA で GitLab のマージリクエストを見るなら

Lesstep の Merge Request Inbox for GitLab は、JetBrains IDE(2024.1 以降)のプラグインです。いまいるブランチからマージリクエストを作ります。GitLab にまだそのブランチが無いときは先に push するよう勧め、同じブランチを対象には受け付けず、GitLab が 409 で答えたときは、このブランチのマージリクエストがもう開いていると、番号の入った GitLab の文を添えて伝えます。403 なら、プロジェクトでの役割か設定があなたのアカウントに許していない可能性がある、と。ほかの断りは GitLab の文で伝えます。見るのは無料、作成・承認・コメント・マージは Pro(月 US$1.50・30日間の無料試用つき)です。画面は日本語です。

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

ほかに:GitLab のマージの断り(405・409・422) · GitLab の承認の断り(401・409) · GitLab のコメント・スレッドの断り(400・403) · GitLab の「insufficient_scope」 · GitLab の 401「invalid_token」 · GitLab の 404「Project Not Found」 · GitLab のリベースの断り・失敗(403・409) · GitLab の MR の一覧の断り(400・404) · GitLab の MR の変更が欠ける(「1000+」・too_large) · GitLab の 429「Retry later」(回数の上限) · GitLab の「compare_timeout」(差分の上限) · JetBrains の IDE で GitLab のマージリクエストを扱う · English