병합 요청 API

Tier: Free, Premium, Ultimate Offering: GitLab.com, Self-Managed, GitLab Dedicated
History
  • reference deprecated in GitLab 12.7.
  • merged_by deprecated in GitLab 14.7.
  • merge_status deprecateddetailed_merge_status로 대체함 in GitLab 15.6에 우선하여 사용합니다.
  • with_merge_status_recheck changed in GitLab 15.11 with a flag named restrict_merge_status_recheck to be ignored for requests from users insufficient permissions. Disabled by default.
  • approvals_before_merge deprecated in GitLab 16.0.
  • prepared_at introduced in GitLab 16.1.
  • merge_after introduced in GitLab 17.5.

비공개 정보에 대한 모든 API 호출에는 인증이 필요합니다.

API v5에서의 제거사항

approvals_before_merge 속성이 더 이상 사용되지 않으며, 병합 요청 승인 API로 대체될 예정입니다.

병합 요청 목록

인증된 사용자가 액세스 할 수 있는 모든 병합 요청을 가져옵니다. 기본적으로 현재 사용자가 만든 병합 요청만 반환합니다. 모든 병합 요청을 가져오려면 scope=all 매개 변수를 사용합니다.

state 매개 변수를 사용하여 특정 상태(opened, closed, locked, 또는 merged) 또는 모든 상태(all)의 병합 요청만 가져올 수 있습니다. 일반적으로 locked로 검색하는 것은 결과를 반환하지 않습니다. 페이지네이션 매개 변수 pageper_page를 사용하여 병합 요청 목록을 제한할 수 있습니다.

GET /merge_requests
GET /merge_requests?state=opened
GET /merge_requests?state=all
GET /merge_requests?milestone=release
GET /merge_requests?labels=bug,reproduced
GET /merge_requests?author_id=5
GET /merge_requests?author_username=gitlab-bot
GET /merge_requests?my_reaction_emoji=star
GET /merge_requests?scope=assigned_to_me
GET /merge_requests?search=foo&in=title

지원되는 속성:

속성 유형 필수 설명
approved_by_ids 정수 배열 아니요 지정된 id를 가진 모든 사용자에 의해 승인된 병합 요청을 반환합니다. 최대 5명의 사용자. None은 승인이 없는 병합 요청을, Any는 승인이 있는 병합 요청을 반환합니다. 프리미엄 및 얼티밋 전용.
approver_ids 정수 배열 아니요 지정된 id를 가진 사용자가 각각 별도의 승인자로 지정한 병합 요청을 반환합니다. None은 승인자가 없는 병합 요청을, Any는 적어도 한 명의 승인자가 있는 병합 요청을 반환합니다. 프리미엄 및 얼티밋 전용.
approved 문자열 아니요 병합 요청을 approved 상태로 필터링합니다. yes는 승인된 병합 요청만, no는 승인되지 않은 병합 요청만 반환합니다. 기본적으로 비활성화된 mr_approved_filter 플래그가 있는 GitLab 15.11에서 도입되었습니다.
assignee_id 정수 아니요 지정된 사용자 id에 할당된 병합 요청을 반환합니다. None은 미할당된 병합 요청을, Any는 할당된 병합 요청을 반환합니다.
author_id 정수 아니요 지정된 사용자 id가 만든 병합 요청을 반환합니다. author_username와 상호 배타적입니다. scope=all 또는 scope=assigned_to_me와 함께 사용합니다.
     

(이하 생략)

병합 요청 목록 응답 노트

  • 병합 요청을 나열하는 것은 merge_status를 미리 업데이트하지 않을 수 있으며(이는 has_conflicts에도 영향을 미침), 이는 비용이 많이 들 수 있습니다. 이 엔드포인트에서이 필드의 값을 필요로 하는 경우에는 쿼리에서 with_merge_status_recheck 매개변수를 true로 설정하십시오.
  • 병합 요청 개체 필드에 대한 참고사항은 단일 병합 요청 응답 노트를 참조하십시오.

프로젝트 병합 요청 목록

이 프로젝트의 모든 병합 요청을 가져옵니다.

GET /projects/:id/merge_requests
GET /projects/:id/merge_requests?state=opened
GET /projects/:id/merge_requests?state=all
GET /projects/:id/merge_requests?iids[]=42&iids[]=43
GET /projects/:id/merge_requests?milestone=release
GET /projects/:id/merge_requests?labels=bug,reproduced
GET /projects/:id/merge_requests?my_reaction_emoji=star

지원되는 속성:

속성 유형 필수여부 설명
id 정수 또는 문자열 프로젝트의 ID 또는 URL-encoded 경로.
approved_by_ids 정수 배열 아니요 주어진 id를 가진 모든 사용자에 의해 승인된 병합 요청을 반환합니다. 최대 5명의 사용자. None은 승인이 없는 병합 요청을 반환합니다. Any는 승인이있는 병합 요청을 반환합니다. 프리미엄 및 얼티밋 전용.
approver_ids 정수 배열 아니요 주어진 id를 가진 모든 사용자가 개별적으로 승인자로 지정된 병합 요청을 반환합니다. None은 승인자가없는 병합 요청을 반환합니다. Any는 승인자가있는 병합 요청을 반환합니다. 프리미엄 및 얼티밋 전용.
approved 문자열 아니요 approved 상태에 따라 병합 요청을 필터링합니다. yes는 승인된 병합 요청 만 반환합니다. no는 승인되지 않은 병합 요청 만 반환합니다. 소개 : GitLab 15.11에서 사용 가능합니다. mr_approved_filter 피쳐 플래그가 활성화 된 경우에만 사용할 수 있습니다.
assignee_id 정수 아니요 주어진 사용자 id에 할당된 병합 요청을 반환합니다. None은 할당되지 않은 병합 요청을 반환합니다. Any는 담당자가있는 병합 요청을 반환합니다.
author_id 정수 아니요 주어진 사용자 id가 만든 병합 요청을 반환합니다. author_username과 상호 배타적입니다.
author_username 문자열 아니요 주어진 username이 만든 병합 요청을 반환합니다. author_id와 상호 배타적입니다.
created_after 날짜 및 시간 아니요 주어진 시간 이후 또는 그 이후에 생성된 병합 요청을 반환합니다. ISO 8601 형식 예상(2019-03-15T08:00:00Z)
created_before 날짜 및 시간 아니요 주어진 시간 이후 또는 그 이후에 생성된 병합 요청을 반환합니다. ISO 8601 형식 예상(2019-03-15T08:00:00Z)
environment 문자열 아니요 주어진 환경에 배포된 병합 요청을 반환합니다.
iids[] 정수 배열 아니요 주어진 iid를 가진 요청을 반환합니다.
labels 문자열 아니요 쉼표로 구분된 레이블 목록과 일치하는 병합 요청을 반환합니다. None은 레이블이없는 모든 병합 요청을 나열합니다. Any는 적어도 하나의 레이블이있는 모든 병합 요청을 나열합니다. 사전 정의 된 이름은 대소문자를 구분하지 않습니다.
merge_user_id 정수 아니요 주어진 사용자 id가 병합 요청을 병합 했을 때 병합 요청을 반환합니다. merge_user_username과 상호 배타적입니다. 소개 : GitLab 17.0에서 사용 가능합니다.
merge_user_username 문자열 아니요 주어진 username이 병합 요청을 병합 했을 때 병합 요청을 반환합니다. merge_user_id와 상호 배타적입니다. 소개 : GitLab 17.0에서 사용 가능합니다.
milestone 문자열 아니요 특정 마일스톤의 병합 요청을 반환합니다. None은 마일스톤이없는 모든 병합 요청을 반환합니다. Any는 할당된 마일스톤이있는 모든 병합 요청을 반환합니다.
my_reaction_emoji 문자열 아니요 주어진 emoji로 인증된 사용자가 반응한 병합 요청을 반환합니다. None은 반응이없는 이슈를 반환합니다. Any는적어도 한 가지 반응이있는 이슈를 반환합니다.
not 해시 아니요 제공된 매개 변수와 일치하지 않는 병합 요청을 반환합니다. labels, milestone, author_id, author_username, assignee_id, assignee_username, reviewer_id, reviewer_username, my_reaction_emoji을 허용합니다.
order_by 문자열 아니요 created_at, title, 또는 updated_at 필드로 정렬된 요청을 반환합니다. 기본값은 created_at입니다.
page 정수 아니요 반환할 결과의 페이지입니다. 기본값은 1입니다.
per_page 정수 아니요 페이지당 결과 수입니다. 기본값은 20입니다.
reviewer_id 정수 아니요 사용자를 리뷰어로 가진 병합 요청을 반환합니다. None은 리뷰어가없는 병합 요청을 반환합니다. Any은 리뷰어가있는 병합 요청을 반환합니다. reviewer_username과 상호 배타적입니다.
reviewer_username 문자열 아니요 사용자를 리뷰어로 가진 병합 요청을 반환합니다. None은 리뷰어가없는 병합 요청을 반환합니다. Any은 리뷰어가있는 병합 요청을 반환합니다. reviewer_id와 상호 배타적입니다.
scope 문자열 아니요 주어진 범위에 대한 병합 요청을 반환합니다: created_by_me, assigned_to_me, 또는 all.
search 문자열 아니요 titledescription에 대한 병합 요청을 검색합니다.
sort 문자열 아니요 asc 또는 desc 순서로 정렬된 요청을 반환합니다. 기본값은 desc입니다.
source_branch 문자열 아니요 지정된 소스 브랜치의 병합 요청을 반환합니다.
state 문자열 아니요 모든 병합 요청 (all) 또는 opened, closed, locked, 또는 merged인 병합 요청만 반환합니다.
target_branch 문자열 아니요 주어진 대상 브랜치가있는 병합 요청을 반환합니다.
updated_after 날짜 및 시간 아니요 주어진 시간 이후 또는 이후에 업데이트된 병합 요청을 반환합니다. ISO 8601 형식 예상(2019-03-15T08:00:00Z)
updated_before 날짜 및 시간 아니요 주어진 시간 이전 또는 이전 업데이트된 병합 요청을 반환합니다. ISO 8601 형식 예상(2019-03-15T08:00:00Z)
view 문자열 아니요 simple이면, 병합 요청의 iid, URL, 제목, 설명 및 기본 상태를 반환합니다.
wip 문자열 아니요 병합 요청의 wip 상태에 따라 필터링합니다. draft 병합 요청만 반환하려면 yes을 반환하고, non-draft 병합 요청을 반환하려면 no를 반환합니다.
with_labels_details 부울 아니요 true이면 응답에 labels 필드에 대한 자세한 정보가 포함됩니다: :name, :color, :description, :description_html, :text_color. 기본값은 false입니다.
with_merge_status_recheck 부울 아니요 true이면이 프로젝션은 merge_status 필드의 비동기적인 재계산을 요청하지만 (보장하지는 않음) 반환합니다. 기본값은 false입니다. GitLab 15.11 이상에서는 고객 역할이 개발자 역할 이상인 사용자에 의해 요청된 경우 이 속성을 무시하려면 피처 플래그 restrict_merge_status_recheck를 활성화하십시오.

성공하면 200 OK과 다음을 반환합니다 응답 속성:

속성 유형 설명
[].id 정수 병합 요청의 ID입니다.
[].iid 정수 병합 요청의 내부 ID입니다.
[].approvals_before_merge 정수 이 병합 요청이 병합되기 전에 필요한 승인 수입니다. 승인 규칙을 구성하려면 병합 요청 승인 API를 참조하십시오. GitLab 16.0에서 폐기되었습니다. 프리미엄과 얼티밋 전용입니다.
[].assignee 객체 병합 요청의 첫 번째 담당자입니다.
[].assignees 배열 병합 요청의 담당자입니다.
[].author 객체 이 병합 요청을 만든 사용자입니다.
[].blocking_discussions_resolved 부울 병합 요청이 병합되기 전에 모든 토론이 해결되었는지를 나타냅니다.
[].closed_at 날짜 및 시간 병합 요청이 닫힌 타임스탬프입니다.
[].closed_by 객체 이 병합 요청을 닫은 사용자입니다.
[].created_at 날짜 및 시간 병합 요청이 만들어진 타임스탬프입니다.
[].description 문자열 병합 요청의 설명입니다.
[].detailed_merge_status 문자열 병합 요청의 자세한 병합 상태입니다. 가능한 값 목록을 보려면 병합 상태를 참조하십시오.
[].discussion_locked 부울 병합 요청에 대한 코멘트가 멤버 전용으로 잠겨 있는지를 나타냅니다.
[].downvotes 정수 병합 요청에 대한 싫어요 수입니다.
[].draft 부울 병합 요청이 초안인지 나타냅니다.
[].has_conflicts 부울 병합 요청에 충돌이 있으며 병합할 수 없는지를 나타냅니다. merge_status 속성에 따라 종속됩니다. merge_statuscannot_be_merged 인 경우에만 false를 반환합니다.
[].labels 배열 병합 요청의 레이블입니다.
[].merge_status 문자열 병합 요청의 상태입니다. unchecked, checking, can_be_merged, cannot_be_merged, 또는 cannot_be_merged_recheck일 수 있습니다. has_conflicts 속성에 영향을 줍니다. 응답 데이터에 대한 중요한 참고 사항은 단일 병합 요청 응답 노트를 참조하십시오. 폐기 : GitLab 15.6에서. 대신 detailed_merge_status를 사용하십시오.
[].user 객체 이 병합 요청을 병합 한 사용자, 자동 병합한 사용자 또는 null입니다. GitLab 14.7에서 소개되었습니다.
`[].merge_when_pipeline_succeed    

그룹 병합 요청 목록

이 그룹 및 하위 그룹의 모든 병합 요청을 가져옵니다.

GET /groups/:id/merge_requests
GET /groups/:id/merge_requests?state=opened
GET /groups/:id/merge_requests?state=all
GET /groups/:id/merge_requests?milestone=release
GET /groups/:id/merge_requests?labels=bug,reproduced
GET /groups/:id/merge_requests?my_reaction_emoji=star

지원되는 속성:

속성 유형 필수 설명
id 정수 또는 문자열 그룹의 ID 또는 URL-인코딩된 경로.
approved_by_ids 정수 배열 아니요 지정된 id를 가진 사용자들에 의해 승인된 병합 요청을 최대 5명까지 반환합니다. None은 승인이 없는 병합 요청을 반환합니다. Any는 승인된 병합 요청을 반환합니다. 프리미엄 및 얼티밋 전용입니다.
approved_by_usernames 문자열 배열 아니요 지정된 username를 가진 사용자들에 의해 승인된 병합 요청을 최대 5명까지 반환합니다. None은 승인이 없는 병합 요청을 반환합니다. Any는 승인된 병합 요청을 반환합니다. 프리미엄 및 얼티밋 전용입니다.
approver_ids 정수 배열 아니요 지정된 id를 가진 사용자들을 개별 승인자로 지정한 병합 요청을 반환합니다. None은 승인자가 없는 병합 요청을 반환합니다. Any는 승인자가 있는 병합 요청을 반환합니다. 프리미엄 및 얼티밋 전용입니다.
approved 문자열 아니요 병합 요청을 approved 상태로 필터링합니다. yes는 승인된 병합 요청만 반환합니다. no는 승인되지 않은 병합 요청만 반환합니다. GitLab 15.11에서 도입됨. 기능 플래그 mr_approved_filter가 활성화된 경우에만 사용할 수 있습니다.
assignee_id 정수 아니요 지정된 사용자 id에 할당된 병합 요청을 반환합니다. None은 할당되지 않은 병합 요청을 반환합니다. Any는 담당자가 있는 병합 요청을 반환합니다.
author_id 정수 아니요 지정된 사용자 id에 의해 생성된 병합 요청을 반환합니다. author_username과 상호 배타적입니다.
author_username 문자열 아니요 지정된 username에 의해 생성된 병합 요청을 반환합니다. author_id와 상호 배타적입니다.
created_after 날짜/시간 아니요 주어진 시간 이후에 생성된 병합 요청을 반환합니다. ISO 8601 형식 (2019-03-15T08:00:00Z)으로 예상됩니다.
created_before 날짜/시간 아니요 주어진 시간 이전에 생성된 병합 요청을 반환합니다. ISO 8601 형식 (2019-03-15T08:00:00Z)으로 예상됩니다.
labels 문자열 아니요 쉼표로 구분된 라벨 목록과 일치하는 병합 요청을 반환합니다. None은 라벨이 없는 모든 병합 요청을 나열합니다. Any는 적어도 하나의 라벨이 있는 모든 병합 요청을 반환합니다. 미리 정의된 이름은 대소문자를 구분하지 않습니다.
merge_user_id 정수 아니요 주어진 사용자 id에 의해 병합된 병합 요청을 반환합니다. merge_user_username과 상호 배타적입니다. GitLab 17.0에서 도입됨.
merge_user_username 문자열 아니요 주어진 username에 의해 병합된 병합 요청을 반환합니다. merge_user_id와 상호 배타적입니다. GitLab 17.0에서 도입됨.
milestone 문자열 아니요 특정 마일스톤의 병합 요청을 반환합니다. None은 마일스톤이 지정되지 않은 모든 병합 요청을 반환합니다. Any는 지정된 마일스톤을 가진 모든 병합 요청을 반환합니다.
my_reaction_emoji 문자열 아니요 인증된 사용자에 의해 지정된 emoji로 반응한 병합 요청을 반환합니다. None은 반응이 없는 이슈를 반환합니다. Any는 적어도 하나의 반응이 있는 이슈를 반환합니다.
non_archived 부울 아니요 아카이브되지 않은 프로젝트에서의 병합 요청만 반환합니다. 기본값은 true입니다.
not 해시 아니요 제공된 매개변수와 일치하지 않는 병합 요청을 반환합니다. labels, milestone, author_id, author_username, assignee_id, assignee_username, reviewer_id, reviewer_username, my_reaction_emoji를 허용합니다.
order_by 문자열 아니요 created_at, title, 또는 updated_at 필드별로 정렬된 병합 요청을 반환합니다. 기본값은 created_at입니다.
reviewer_id 정수 아니요 지정된 사용자 id리뷰어로 가진 병합 요청을 반환합니다. None은 리뷰어가 없는 병합 요청을 반환합니다. Any는 리뷰어가 있는 병합 요청을 반환합니다. reviewer_username과 상호 배타적입니다.
reviewer_username 문자열 아니요 지정된 username리뷰어로 가진 병합 요청을 반환합니다. None은 리뷰어가 없는 병합 요청을 반환합니다. Any는 리뷰어가 있는 병합 요청을 반환합니다. reviewer_id와 상호 배타적입니다.
scope 문자열 아니요 주어진 범위에 대한 병합 요청을 반환합니다: created_by_me, assigned_to_me 또는 all.
search 문자열 아니요 병합 요청을 titledescription에 대해 검색합니다.
source_branch 문자열 아니요 지정된 소스 브랜치를 가진 병합 요청을 반환합니다.
sort 문자열 아니요 asc 또는 desc 순서로 정렬된 병합 요청을 반환합니다. 기본값은 desc입니다.
state 문자열 아니요 모든 병합 요청 (all) 또는 opened, closed, locked, 또는 merged인 요청만 반환합니다.
target_branch 문자열 아니요 지정된 대상 브랜치를 가진 병합 요청을 반환합니다.
updated_after 날짜/시간 아니요 주어진 시간 이후에 업데이트된 병합 요청을 반환합니다. ISO 8601 형식 (2019-03-15T08:00:00Z)으로 예상됩니다.
updated_before 날짜/시간 아니요 주어진 시간 이전에 업데이트된 병합 요청을 반환합니다. ISO 8601 형식 (2019-03-15T08:00:00Z)으로 예상됩니다.
view 문자열 아니요 simple이면 병합 요청의 iid, URL, 제목, 설명, 및 기본 상태를 반환합니다.
with_labels_details 부울 아니요 true이면 응답은 라벨 필드의 각 라벨에 대한 자세한 정보를 반환합니다: :name, :color, :description, :description_html, :text_color. 기본값은 false입니다.
with_merge_status_recheck 부울 아니요 true인 경우 이 프로젝션은(merge_status 필드의) 비동기적 다시 계산을 요청하지만 보장하지 않습니다. 기본값은 false입니다. GitLab 15.11 이상에서는 적어도 Developer 역할을 갖지 않은 사용자가 요청했을 때, 이 속성을 무시하려면 restrict_merge_status_recheck` 기능 플래그을 활성화해야 합니다.

병합 요청 목록을 제한하려면 페이지네이션 매개변수 pageper_page를 사용합니다.

응답에는 group_id가 병합 요청이 위치한 프로젝트를 포함하는 그룹의 ID를 나타냅니다.

응답 예시:

[
  {
    "id": 1,
    "iid": 1,
    "project_id": 3,
    "title": "test1",
    "description": "fixed login page css paddings",
    "state": "merged",
    "imported": false,
    "imported_from": "none",
    "merged_by": { // Deprecated and will be removed in API v5, use `merge_user` instead
      "id": 87854,
      "name": "Douwe Maan",
      "username": "DouweM",
      "state": "active",
      "avatar_url": "https://gitlab.example.com/uploads/-/system/user/avatar/87854/avatar.png",
      "web_url": "https://gitlab.com/DouweM"
    },
    "merge_user": {
      "id": 87854,
      "name": "Douwe Maan",
      "username": "DouweM",
      "state": "active",
      "avatar_url": "https://gitlab.example.com/uploads/-/system/user/avatar/87854/avatar.png",
      "web_url": "https://gitlab.com/DouweM"
    },
    "merged_at": "2018-09-07T11:16:17.520Z",
    "merge_after": "2018-09-07T11:16:00.000Z",
    "prepared_at": "2018-09-04T11:16:17.520Z",
    "closed_by": null,
    "closed_at": null,
    "created_at": "2017-04-29T08:46:00Z",
    "updated_at": "2017-04-29T08:46:00Z",
    "target_branch": "main",
    "source_branch": "test1",
    "upvotes": 0,
    "downvotes": 0,
    "author": {
      "id": 1,
      "name": "Administrator",
      "username": "admin",
      "state": "active",
      "avatar_url": null,
      "web_url" : "https://gitlab.example.com/admin"
    },
    ...
  }
]

응답 데이터에 대한 중요한 참고 사항은 병합 요청 목록 응답 노트를 참조하세요.

단일 MR 가져오기

단일 병합 요청에 대한 정보를 표시합니다.

GET /projects/:id/merge_requests/:merge_request_iid

지원되는 속성:

속성 유형 필수 여부 설명
id 정수 또는 문자열 프로젝트의 ID 또는 URL-인코딩 된 경로.
merge_request_iid 정수 병합 요청의 내부 ID.
include_diverged_commits_count 부울 아니요 true의 경우, 응답에 대상 브랜치 뒤의 커밋이 포함됩니다.
include_rebase_in_progress 부울 아니요 true의 경우, 재베이스 작업이 진행 중인지 여부가 응답에 포함됩니다.
render_html 부울 아니요 true의 경우, 응답에 제목과 설명에 대한 HTML 렌더링이 포함됩니다.

응답

속성 유형 설명
approvals_before_merge 정수 해당 병합 요청이 병합되기 전에 필요한 승인 횟수. 승인 규칙을 구성하려면 병합 요청 승인 API를 참조하십시오. GitLab 16.0에서 사양 변경됨. 프리미엄 및 얼티밋 전용.
assignee 객체 병합 요청의 첫 번째 지정 대상.
assignees 배열 병합 요청의 지정 대상.
author 객체 이 병합 요청을 생성한 사용자.
blocking_discussions_resolved 부울 모든 논의가 해결되었는지 여부, 병합 요청이 병합되기 전에 필요한 경우에만 적용됩니다.
changes_count 문자열 병합 요청에 대한 변경 사항의 수. 병합 요청이 작성되었을 때는 비어 있으며, 비동기적으로 채워집니다. 줄바꿈은 정수가 아니라 문자열입니다. 표시 및 저장할 변경이 너무 많은 병합 요청의 경우 값이 1000으로 제한되고 문자열 "1000+"이 반환됩니다. 새 병합 요청에 대한 API 필드 삭제를 참조하십시오.
closed_at 날짜 및 시간 병합 요청이 닫힌 시간.
closed_by 객체 이 병합 요청을 닫은 사용자.
created_at 날짜 및 시간 병합 요청이 만들어진 시간.
description 문자열 병합 요청의 설명. 캐싱을 위해 HTML로 렌더링된 마크다운이 포함됩니다.
detailed_merge_status 문자열 병합 요청의 상세 병합 상태. 가능한 값은 병합 상태를 참조하십시오.
diff_refs 객체 이 병합 요청의 기본 SHA, 헤드 SHA 및 시작 SHA에 대한 참조. 병합 요청이 작성된 경우 비어 있으며, 비동기적으로 채워집니다. 새 병합 요청에 대한 API 필드 삭제를 참조하십시오.
discussion_locked 부울 병합 요청에 대한 코멘트가 회원 전용인지 여부.
downvotes 정수 병합 요청에 대한 다운보트 수.
draft 부울 병합 요청이 초안인지 여부를 나타냅니다.
first_contribution 부울 병합 요청이 작성자의 첫 번째 기여인지 여부를 나타냅니다.
first_deployed_to_production_at 날짜 및 시간 첫 번째 배포가 완료된 시간.
force_remove_source_branch 부울 프로젝트 설정이 병합 후에 소스 브랜치를 삭제하는지 여부를 나타냅니다.
has_conflicts 부울 병합 요청에 충돌이 있는지 여부 및 병합할 수 없는 경우에만 의존합니다. merge_status 속성에 따라 다릅니다. merge_statuscannot_be_merged인 경우를 제외하고 항상 false를 반환합니다.
head_pipeline 객체 병합 요청의 브랜치 HEAD에서 실행되는 파이프라인. 보다 완전한 정보가 들어 있으므로 pipeline 대신 사용하십시오.
id 정수 병합 요청의 ID.
iid 정수 병합 요청의 내부 ID.
labels 배열 병합 요청의 라벨.
latest_build_finished_at 날짜 및 시간 병합 요청의 최신 빌드가 끝난 시간.
latest_build_started_at 날짜 및 시간 병합 요청의 최신 빌드가 시작된 시간.
merge_commit_sha 문자열 병합 요청 커밋의 SHA. 병합되기 전까지 null을 반환합니다.
merge_error 문자열 병합에 실패한 경우에 표시되는 오류 메시지. 병합 가능성을 확인하려면 detailed_merge_status를 사용하십시오.
merge_user 객체 이 병합 요청을 병합한 사용자, 자동 병합한 사용자 또는 null.
merge_status 문자열 병합 요청의 상태. unchecked, checking, can_be_merged, cannot_be_merged, 또는 cannot_be_merged_recheck가 될 수 있습니다. has_conflicts 속성에 영향을 줍니다. 응답 데이터에 대한 중요한 참고 사항은 단일 병합 요청 응답 사항를 참조하십시오. GitLab 15.6에서 사양 변경됨. 대신 detailed_merge_status를 사용하십시오.
merge_when_pipeline_succeeds 부울 파이프라인이 성공할 때 병합이 수행되는지 여부를 나타냅니다.
merged_at 날짜 및 시간 병합 요청이 병합된 시간.
merged_by 객체 이 병합 요청을 병합한 사용자 또는 자동 병합한 사용자. GitLab 14.7에서 사양 변경됨API 버전 5에서 제거 예정. 대신 merge_user를 사용하십시오.
milestone 객체 병합 요청의 마일스톤.
pipeline 객체 병합 요청의 브랜치 HEAD에서 실행되는 파이프라인. 보다 완전한 정보가 들어 있으므로 head_pipeline 대신 사용하십시오.
prepared_at 날짜 및 시간 병합 요청이 준비된 시간. 이 필드는 준비 단계가 완료된 후 한 번만 채워지며, 추가 변경 사항이 추가되는 경우에는 업데이트되지 않습니다.
project_id 정수 병합 요청 프로젝트의 ID.
reference 문자열 병합 요청의 내부 참조. 기본적으로 줄임 형식으로 반환됩니다. GitLab 12.7에서 사양 변경됨API 버전 5에서 제거 예정. 대신 references를 사용하십시오.
references 객체 병합 요청의 내부 참조. short, relative, full 참조를 포함합니다. references.relative는 병합 요청의 그룹 또는 프로젝트에 상대적입니다. 병합 요청 프로젝트에서 요청된 경우 relativeshort 형식은 동일합니다. 그룹 또는 프로젝트 간에 요청된 경우 relativefull 형식은 동일합니다.
reviewers 배열 병합 요청의 리뷰어.
sha 문자열 병합 요청의 diff 헤드 SHA.
should_remove_source_branch 부울 병합 요청의 소스 브랜치가 병합 후에 삭제되어야 하는지 여부를 나타냅니다.
source_branch 문자열 병합 요청의 소스 브랜치.
source_project_id 정수 병합 요청 소스 프로젝트의 ID.
squash 부울 병합할 때 squash가 활성화되어 있는지 여부를 나타냅니다.
squash_commit_sha 문자열 squash 커밋의 SHA. 병합될 때까지 비어 있습니다.
state 문자열 병합 요청의 상태. opened, closed, merged 또는 locked가 될 수 있습니다.
subscribed 부울 현재 인증된 사용자가 이 병합 요청에 구독 중인지 여부를 나타냅니다.
target_branch 문자열 병합 요청의 대상 브랜치.
target_project_id 정수 병합 요청 대상 프로젝트의 ID.
task_completion_status 객체 작업 완료 상태.
title 문자열 병합 요청의 제목.
updated_at 날짜 및 시간 병합 요청이 업데이트된 시간.
upvotes 정수 병합 요청에 대한 Upvote 수.
user 객체 병합 요청을 위해 요청된 사용자의 권한.
user_notes_count 정수 병합 요청의 사용자 노트 수.
web_url 문자열 병합 요청의 웹 URL.
work_in_progress 부울 사용되지 않음: 대신 draft를 사용하십시오. 병합 요청이 초안인지 여부를 나타냅니다.

예시 응답:

{
  "id": 155016530,
  "iid": 133,
  "project_id": 15513260,
  "title": "Manual job rules",
  "description": "",
  "state": "opened",
  "imported": false,
  "imported_from": "none",
  "created_at": "2022-05-13T07:26:38.402Z",
  "updated_at": "2022-05-14T03:38:31.354Z",
  "merged_by": null, // Deprecated and will be removed in API v5. Use `merge_user` instead.
  "merge_user": null,
  "merged_at": null,
  "merge_after": "2018-09-07T11:16:00.000Z",
  "prepared_at": "2018-09-04T11:16:17.520Z",
  "closed_by": null,
  "closed_at": null,
  "target_branch": "main",
  "source_branch": "manual-job-rules",
  "user_notes_count": 0,
  "upvotes": 0,
  "downvotes": 0,
  "author": {
    "id": 4155490,
    "username": "marcel.amirault",
    "name": "Marcel Amirault",
    "state": "active",
    "avatar_url": "https://gitlab.com/uploads/-/system/user/avatar/4155490/avatar.png",
    "web_url": "https://gitlab.com/marcel.amirault"
  },
  "assignees": [],
  "assignee": null,
  "reviewers": [],
  "source_project_id": 15513260,
  "target_project_id": 15513260,
  "labels": [],
  "draft": false,
  "work_in_progress": false,
  "milestone": null,
  "merge_when_pipeline_succeeds": false,
  "merge_status": "can_be_merged",
  "detailed_merge_status": "can_be_merged",
  "sha": "e82eb4a098e32c796079ca3915e07487fc4db24c",
  "merge_commit_sha": null,
  "squash_commit_sha": null,
  "discussion_locked": null,
  "should_remove_source_branch": null,
  "force_remove_source_branch": true,
  "reference": "!133", // Deprecated. Use `references` instead.
  "references": {
    "short": "!133",
    "relative": "!133",
    "full": "marcel.amirault/test-project!133"
  },
  "web_url": "https://gitlab.com/marcel.amirault/test-project/-/merge_requests/133",
  "time_stats": {
    "time_estimate": 0,
    "total_time_spent": 0,
    "human_time_estimate": null,
    "human_total_time_spent": null
  },
  "squash": false,
  "task_completion_status": {
    "count": 0,
    "completed_count": 0
  },
  "has_conflicts": false,
  "blocking_discussions_resolved": true,
  "approvals_before_merge": null, // deprecated, use [Merge request approvals API](merge_request_approvals.md)
  "subscribed": true,
  "changes_count": "1",
  "latest_build_started_at": "2022-05-13T09:46:50.032Z",
  "latest_build_finished_at": null,
  "first_deployed_to_production_at": null,
  "pipeline": { // Use `head_pipeline` instead.
    "id": 538317940,
    "iid": 1877,
    "project_id": 15513260,
    "sha": "1604b0c46c395822e4e9478777f8e54ac99fe5b9",
    "ref": "refs/merge-requests/133/merge",
    "status": "failed",
    "source": "merge_request_event",
    "created_at": "2022-05-13T09:46:39.560Z",
   

### 단일 병합 요청 응답 노트

 엔드포인트로 요청이 있을   병합 요청의 병합 가능성(`merge_status`)은 비동기적으로 확인됩니다. 업데이트된 상태를 얻으려면  API 엔드포인트를 주기적으로 확인하세요. 이는 `has_conflicts` 속성에 영향을 미치며, `merge_status`에 따라 `false`를 반환합니다. 이는 `merge_status`가 `cannot_be_merged`인 경우에만 해당합니다.

### 병합 상태

> - GitLab 15.6에서는 `merge_status`가 [deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/3169#note_1162532204)되었습니다.
> - GitLab 15.6에서 `detailed_merge_status`가 [introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/101724)되었습니다.

모든 잠재적인 상태를 고려하려면 `merge_status`대신 `detailed_merge_status`를 사용하세요.

- `detailed_merge_status` 필드에는 병합 요청과 관련된 다음   하나가 포함될  있습니다:
  - `approvals_syncing`: 병합 요청의 승인이 동기화 중입니다.
  - `checking`: Git이 유효한 병합이 가능한지 테스트 중입니다.
  - `ci_must_pass`: 병합하기 전에 CI/CD 파이프라인이 성공해야 합니다.
  - `ci_still_running`: CI/CD 파이프라인이 아직 실행 중입니다.
  - `commits_status`: 소스 브랜치가 있고 커밋을 포함해야 합니다.
  - `conflict`: 소스  대상 브랜치 사이에 충돌이 있습니다.
  - `discussions_not_resolved`: 모든 토론은 병합되기 전에 해결되어야 합니다.
  - `draft_status`: 병합 요청이 초안이므로 병합할  없습니다.
  - `jira_association_missing`: 제목 또는 설명에 Jira 이슈가 있어야 합니다. 구성 방법은
    [병합 요청을 병합하려면 관련 Jira 이슈가 필요합니다](../integration/jira/issues.md#require-associated-jira-issue-for-merge-requests-to-be-merged)를 참조하세요.
  - `mergeable`: 브랜치를 대상 브랜치에 깔끔하게 병합할  있습니다.
  - `merge_request_blocked`: 다른 병합 요청에 의해 차단됩니다.
  - `merge_time`: 지정된 시간 이후에만 병합될  있습니다.
  - `need_rebase`: 병합 요청을 다시베이스해야 합니다.
  - `not_approved`: 병합하기 전에 승인이 필요합니다.
  - `not_open`: 병합하기 전에 병합 요청이 열려야 합니다.
  - `preparing`: 병합 요청 차이가 생성 중입니다.
  - `requested_changes`: 변경 요청을  리뷰어가 있는 병합 요청입니다.
  - `security_policy_evaluation`: 모든 보안 정책을 평가해야 합니다.
    `policy_mergability_check` 기능 플래그가 활성화되어 있어야 합니다.
  - `security_policy_violations`: 모든 보안 정책을 충족해야 합니다.
    `policy_mergability_check` 기능 플래그가 활성화되어 있어야 합니다.
  - `status_checks_must_pass`: 병합하기 전에 모든 상태 확인이 필요합니다.
  - `unchecked`: Git이 아직 유효한 병합을 테스트하지 않았습니다.
  - `locked_paths`: 다른 사용자에 의해 잠겨진 경로를 기본 브랜치로 병합하기 전에 잠금을 해제해야 합니다.
  - `locked_lfs_files`: 다른 사용자에 의해 잠겨진 LFS 파일을 기본 브랜치로 병합하기 전에 잠금을 해제해야 합니다.

### 준비 단계

`prepared_at` 필드는 다음 단계가 완료된 후에  번만 채워집니다:

- 차이 생성
- 파이프라인 생성
- 병합 가능성 확인
- 모든 Git LFS 객체 링크
- 알림 보내기

 많은 변경이 병합 요청에 추가되면 `prepared_at` 필드가 업데이트되지 않습니다.

## 단일 병합 요청 참여자 가져오기

병합 요청 참여자 목록을 가져옵니다.

```plaintext
GET /projects/:id/merge_requests/:merge_request_iid/participants

지원되는 속성:

속성 유형 필수 설명
id 정수 또는 문자열 프로젝트의 ID 또는 URL 인코딩된 경로.
merge_request_iid 정수 병합 요청의 내부 ID.

예시 응답:

[
  {
    "id": 1,
    "name": "John Doe1",
    "username": "user1",
    "state": "active",
    "avatar_url": "http://www.gravatar.com/avatar/c922747a93b40d1ea88262bf1aebee62?s=80&d=identicon",
    "web_url": "http://localhost/user1"
  },
  {
    "id": 2,
    "name": "John Doe2",
    "username": "user2",
    "state": "active",
    "avatar_url": "http://www.gravatar.com/avatar/10fc7f102be8de7657fb4d80898bbfe3?s=80&d=identicon",
    "web_url": "http://localhost/user2"
  }
]

단일 병합 요청 리뷰어 가져오기

병합 요청 리뷰어 목록을 가져옵니다.

GET /projects/:id/merge_requests/:merge_request_iid/reviewers

지원되는 속성:

속성 유형 필수 설명
id 정수 또는 문자열 프로젝트의 ID 또는 URL 인코딩된 경로.
merge_request_iid 정수 병합 요청의 내부 ID.

예시 응답:

[
  {
    "user": {
      "id": 1,
      "name": "John Doe1",
      "username": "user1",
      "state": "active",
      "avatar_url": "http://www.gravatar.com/avatar/c922747a93b40d1ea88262bf1aebee62?s=80&d=identicon",
      "web_url": "http://localhost/user1"
    },
    "state": "unreviewed",
    "created_at": "2022-07-27T17:03:27.684Z"
  },
  {
    "user": {
      "id": 2,
      "name": "John Doe2",
      "username": "user2",
      "state": "active",
      "avatar_url": "http://www.gravatar.com/avatar/10fc7f102be8de7657fb4d80898bbfe3?s=80&d=identicon",
      "web_url": "http://localhost/user2"
    },
    "state": "reviewed",
    "created_at": "2022-07-27T17:03:27.684Z"
  }
]

단일 병합 요청 커밋 가져오기

병합 요청 커밋 목록을 가져옵니다.

GET /projects/:id/merge_requests/:merge_request_iid/commits

지원되는 속성:

속성 유형 필수 여부 설명
id 정수 또는 문자열 프로젝트의 ID 또는 URL 인코딩된 경로.
merge_request_iid 정수 병합 요청의 내부 ID.

성공하면 200 OK 및 다음 응답 속성을 반환합니다.

속성 유형 설명
commits 객체 배열 병합 요청의 커밋.
commits[].id 문자열 커밋의 ID.
commits[].short_id 문자열 커밋의 짧은 ID.
commits[].created_at 날짜/시간 committed_date 필드와 동일합니다.
commits[].parent_ids 배열 상위 커밋의 ID.
commits[].title 문자열 커밋 제목.
commits[].message 문자열 커밋 메시지.
commits[].author_name 문자열 커밋 작성자 이름.
commits[].author_email 문자열 커밋 작성자 이메일 주소.
commits[].authored_date 날짜/시간 커밋 작성일.
commits[].committer_name 문자열 커미터의 이름.
commits[].committer_email 문자열 커미터의 이메일 주소.
commits[].committed_date 날짜/시간 커밋 날짜.
commits[].trailers 객체 커밋에 대한 Git 트레일러. 중복 키는 마지막 값만 포함됩니다.
commits[].extended_trailers 객체 커밋에 대한 Git 트레일러.
commits[].web_url 문자열 병합 요청의 웹 URL.

예시 요청:

curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/1/merge_requests/1/commits"

예시 응답:

[
  {
    "id": "ed899a2f4b50b4370feeea94676502b42383c746",
    "short_id": "ed899a2f4b5",
    "title": "Replace sanitize with escape once",
    "author_name": "Example User",
    "author_email": "user@example.com",
    "authored_date": "2012-09-20T11:50:22+03:00",
    "committer_name": "Example User",
    "committer_email": "user@example.com",
    "committed_date": "2012-09-20T11:50:22+03:00",
    "created_at": "2012-09-20T11:50:22+03:00",
    "message": "Replace sanitize with escape once",
    "trailers": {},
    "extended_trailers": {},
    "web_url": "https://gitlab.example.com/project/-/commit/ed899a2f4b50b4370feeea94676502b42383c746"
  },
  {
    "id": "6104942438c14ec7bd21c6cd5bd995272b3faff6",
    "short_id": "6104942438c",
    "title": "Sanitize for network graph",
    "author_name": "Example User",
    "author_email": "user@example.com",
    "authored_date": "2012-09-20T09:06:12+03:00",
    "committer_name": "Example User",
    "committer_email": "user@example.com",
    "committed_date": "2012-09-20T09:06:12+03:00",
    "created_at": "2012-09-20T09:06:12+03:00",
    "message": "Sanitize for network graph",
    "trailers": {},
    "extended_trailers": {},
    "web_url": "https://gitlab.example.com/project/-/commit/6104942438c14ec7bd21c6cd5bd995272b3faff6"
  }
]

병합 요청 의존성 가져오기

병합하기 전에 해결해야 할 병합 요청 의존성에 대한 정보를 표시합니다.

GET /projects/:id/merge_requests/:merge_request_iid/blocks

지원되는 속성:

속성 유형 필수 여부 설명
id 정수 또는 문자열 프로젝트의 ID 또는 URL 인코딩된 경로.

예시 요청:

curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/1/merge_requests/1/blocks"

예시 응답:

[
  {
    "id": 1,
    "blocking_merge_request": {
      "id": 145,
      "iid": 12,
      "project_id": 7,
      "title": "Interesting MR",
      "description": "Does interesting things.",
      "state": "opened",
      "created_at": "2024-07-05T21:29:11.172Z",
      "updated_at": "2024-07-05T21:29:11.172Z",
      "merged_by": null,
      "merge_user": null,
      "merged_at": null,
      "merge_after": "2018-09-07T11:16:00.000Z",
      "closed_by": null,
      "closed_at": null,
      "target_branch": "master",
      "source_branch": "v2.x",
      "user_notes_count": 0,
      "upvotes": 0,
      "downvotes": 0,
      "author": {
        "id": 2,
        "username": "aiguy123",
        "name": "AI GUY",
        "state": "active",
        "locked": false,
        "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
        "web_url": "https://localhost/aiguy123"
      },
      "assignees": [
        {
          "id": 2,
          "username": "aiguy123",
          "name": "AI GUY",
          "state": "active",
          "locked": false,
          "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
          "web_url": "https://localhost/aiguy123"
        }
      ],
      "assignee": {
        "id": 2,
        "username": "aiguy123",
        "name": "AI GUY",
        "state": "active",
        "locked": false,
        "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
        "web_url": "https://localhost/aiguy123"
      },
      "reviewers": [
        {
          "id": 2,
          "username": "aiguy123",
          "name": "AI GUY",
          "state": "active",
          "locked": false,
          "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
          "web_url": "https://localhost/aiguy123"
        },
        {
          "id": 1,
          "username": "root",
          "name": "Administrator",
          "state": "active",
          "locked": false,
          "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
          "web_url": "https://localhost/root"
        }
      ],
      "source_project_id": 7,
      "target_project_id": 7,
      "labels": [],
      "draft": false,
      "imported": false,
      "imported_from": "none",
      "work_in_progress": false,
      "milestone": null,
      "merge_when_pipeline_succeeds": false,
      "merge_status": "unchecked",
      "detailed_merge_status": "unchecked",
      "sha": "ce7e4f2d0ce13cb07479bb39dc10ee3b861c08a6",
      "merge_commit_sha": null,
      "squash_commit_sha": null,
      "discussion_locked": null,
      "should_remove_source_branch": null,
      "force_remove_source_branch": true,
      "prepared_at": null,
      "reference": "!12",
      "references": {
        "short": "!12",
        "relative": "!12",
        "full": "my-group/my-project!12"
      },
      "web_url": "https://localhost/my-group/my-project/-/merge_requests/12",
      "time_stats": {
        "time_estimate": 0,
        "total_time_spent": 0,
        "human_time_estimate": null,
        "human_total_time_spent": null
      },
      "squash": false,
      "squash_on_merge": false,
      "task_completion_status": {
        "count": 0,
        "completed_count": 0
      },
      "has_conflicts": false,
      "blocking_discussions_resolved": true,
      "approvals_before_merge": null
    },
    "blocked_merge_request": {
      "id": 146,
      "iid": 13,
      "project_id": 7,
      "title": "Really cool MR",
      "description": "Adds some stuff",
      "state": "opened",
      "created_at": "2024-07-05T21:31:34.811Z",
      "updated_at": "2024-07-27T02:57:08.054Z",
      "merged_by": null,
      "merge_user": null,
      "merged_at": null,
      "merge_after": "2018-09-07T11:16:00.000Z",
      "closed_by": null,
      "closed_at": null,
      "target_branch": "master",
      "source_branch": "remove-from",
      "user_notes_count": 0,
      "upvotes": 1,
      "downvotes": 0,
      "author": {
        "id": 2,
        "username": "aiguy123",
        "name": "AI GUY",
        "state": "active",
        "locked": false,
        "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
        "web_url": "https://localhost/aiguy123"
      },
      "assignees": [
        {
          "id": 2,
          "username": "aiguy123",
          "name": "AI GUY",
          "state": "active",
        }
      ],
      "assignee": {
        "id": 2,
        "username": "aiguy123",
        "name": "AI GUY",
      },
      "reviewers": [
        {
          "id": 1,
          "username": "root",
          "name": "Administrator",
        }
      ],
      "source_project_id": 7,
      "target_project_id": 7,
      "labels": [],
      "draft": false,
      "imported": false,
      "imported_from": "none",
      "work_in_progress": false,
      "milestone": {
        "id": 59,
        "iid": 6,
        "project_id": 7,
        "title": "Sprint 1718897375",
        "description": "Accusantium omnis iusto a animi.",
      },
      "merge_when_pipeline_succeeds": false,
      "merge_status": "cannot_be_merged",
      "detailed_merge_status": "not_approved",
      "sha": "daa75b9b17918f51f43866ff533987fda71375ea",
      "merge_commit_sha": null,
      "squash_commit_sha": null,
      "discussion_locked": null,
      "should_remove_source_branch": null,
      "force_remove_source_branch": true,
      "prepared_at": "2024-07-11T18:50:46.215Z",
    }
  }
]

병합 요청 종속성 삭제

병합 요청 종속성을 삭제합니다.

DELETE /projects/:id/merge_requests/:merge_request_iid/blocks/:block_id

지원되는 속성:

속성 유형 필수 설명
id 정수 또는 문자열 인증된 사용자가 소유한 프로젝트의 ID 또는 URL-인코딩 된 경로
merge_request_iid 정수 병합 요청의 내부 ID
block_id 정수 블록의 내부 ID

예시 요청:

curl --request DELETE --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/1/merge_requests/1/blocks/1"

응답:

  • 종속성이 성공적으로 삭제된 경우 204 No Content
  • 병합 요청을 업데이트하기 위한 권한이 없는 경우 403 Forbidden
  • 차단 중인 병합 요청을 읽기 위한 권한이 없는 경우 403 Forbidden

병합 요청 종속성 생성

병합 요청 종속성을 생성합니다.

POST /projects/:id/merge_requests/:merge_request_iid/blocks

지원되는 속성:

속성 유형 필수 설명
id 정수 또는 문자열 인증된 사용자가 소유한 프로젝트의 ID 또는 URL-인코딩 된 경로
merge_request_iid 정수 병합 요청의 내부 ID
blocking_merge_request_id 정수 차단 중인 병합 요청의 내부 ID

예시 요청:

curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/1/merge_requests/1/blocks?blocking_merge_request_id=2"

응답:

  • 종속성이 성공적으로 생성된 경우 201 Created
  • 차단 중인 병합 요청이 저장에 실패한 경우 400 Bad request
  • 차단 중인 병합 요청을 읽기 위한 권한이 없는 경우 403 Forbidden
  • 차단 중인 병합 요청을 찾을 수 없는 경우 404 Not found
  • 블록이 이미 존재하는 경우 409 Conflict

예시 응답:

[
  {
    "id": 1,
    "blocking_merge_request": {
      "id": 145,
      "iid": 12,
      "project_id": 7,
      "title": "흥미로운 MR",
      "description": "흥미로운 작업 수행",
      "state": "opened",
      "created_at": "2024-07-05T21:29:11.172Z",
      "updated_at": "2024-07-05T21:29:11.172Z",
      "merged_by": null,
      "merge_user": null,
      "merged_at": null,
      "merge_after": "2018-09-07T11:16:00.000Z",
      "closed_by": null,
      "closed_at": null,
      "target_branch": "master",
      "source_branch": "v2.x",
      "user_notes_count": 0,
      "upvotes": 0,
      "downvotes": 0,
      "author": {
        "id": 2,
        "username": "aiguy123",
        "name": "AI GUY",
        "state": "active",
        "locked": false,
        "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
        "web_url": "https://localhost/aiguy123"
      },
      "assignees": [
        {
          "id": 2,
          "username": "aiguy123",
          "name": "AI GUY",
          "state": "active",
          "locked": false,
          "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
          "web_url": "https://localhost/aiguy123"
        }
      ],
      "assignee": {
        "id": 2,
        "username": "aiguy123",
        "name": "AI GUY",
        "state": "active",
        "locked": false,
        "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
        "web_url": "https://localhost/aiguy123"
      },
      "reviewers": [
        {
          "id": 2,
          "username": "aiguy123",
          "name": "AI GUY",
          "state": "active",
          "locked": false,
          "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
          "web_url": "https://localhost/aiguy123"
        },
        {
          "id": 1,
          "username": "root",
          "name": "관리자",
          "state": "active",
          "locked": false,
          "avatar_url": "https://www.gravatar.com/avatar/0?s=80&d=identicon",
          "web_url": "https://localhost/root"
        }
      ],
      "source_project_id": 7,
      "target_project_id": 7,
      "labels": [],
      "draft": false,
      "imported": false,
      "imported_from": "none",
      "work_in_progress": false,
      "milestone": null,
      "merge_when_pipeline_succeeds": false,
      "merge_status": "unchecked",
      "detailed_merge_status": "unchecked",
      "sha": "ce7e4f2d0ce13cb07479bb39dc10ee3b861c08a6",
      "merge_commit_sha": null,
      "squash_commit_sha": null,
      "discussion_locked": null,
      "should_remove_source_branch": null,
      "force_remove_source_branch": true,
      "prepared_at": null,
      "reference": "!12",
      "references": {
        "short": "!12",
        "relative": "!12",
        "full": "my-group/my-project!12"
      },
      "web_url": "https://localhost/my-group/my-project/-/merge_requests/12",
      "time_stats": {
        "time_estimate": 0,
        "total_time_spent": 0,
        "human_time_estimate": null,
        "human_total_time_spent": null
      },
      "squash": false,
      "squash_on_merge": false,
      "task_completion_status": {
        "count": 0,
        "completed_count": 0
      },
      "has_conflicts": false,
      "blocking_discussions_resolved": true,
      "approvals_before_merge": null
    },
    "project_id": 7
  }
]

단일 병합 요청 변경 사항 가져오기

경고: 이 엔드포인트는 GitLab 15.7에서 폐기 예정되었으며 API v5에서 삭제 예정입니다. 대신 병합 요청 차이 목록 엔드포인트를 사용하세요.

병합 요청에 대한 파일 및 변경 내용을 포함한 정보를 표시합니다.

GET /projects/:id/merge_requests/:merge_request_iid/changes

지원되는 속성:

속성 유형 필수 여부 설명
id 정수 또는 문자열 프로젝트의 ID 또는 URL 인코딩 된 경로.
merge_request_iid 정수 병합 요청의 내부 ID.
access_raw_diffs 부울 아니오 Gitaly를 통해 변경 사이를 검색합니다.
unidiff 부울 아니오 변경된 사이를 통합된 diff 형식으로 나타냅니다. 기본값은 false입니다. GitLab 16.5에서 소개되었습니다.

이 변경 세트와 관련된 diff에는 API 또는 UI를 통해 본 다른 diff에 적용된 동일한 크기 제한이 적용됩니다. 이러한 제한이 결과에 영향을 미치면 overflow 필드에 true 값이 포함됩니다. 데이터베이스에서가 아닌 Gitaly에서 직접 diff를 가져옴으로써 이러한 제한 없이 diff 데이터를 검색하려면 access_raw_diffs 매개변수를 추가합니다. 이 접근 방법은 일반적으로 더 느리고 리소스를 더 많이 사용하지만 데이터베이스 지원 diff에 적용된 크기 제한을 받지 않습니다. 여전히 Gitaly에 고유한 제한이 적용됩니다.

예시 응답:

{
  "id": 21,
  "iid": 1,
  "project_id": 4,
  "title": "Blanditiis beatae suscipit hic assumenda et molestias nisi asperiores repellat et.",
  "state": "reopened",
  "created_at": "2015-02-02T19:49:39.159Z",
  "updated_at": "2015-02-02T20:08:49.959Z",
  "target_branch": "secret_token",
  "source_branch": "version-1-9",
  "upvotes": 0,
  "downvotes": 0,
  "author": {
    "name": "Chad Hamill",
    "username": "jarrett",
    "id": 5,
    "state": "active",
    "avatar_url": "http://www.gravatar.com/avatar/b95567800f828948baf5f4160ebb2473?s=40&d=identicon",
    "web_url" : "https://gitlab.example.com/jarrett"
  },
  "assignee": {
    "name": "Administrator",
    "username": "root",
    "id": 1,
    "state": "active",
    "avatar_url": "http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=40&d=identicon",
    "web_url" : "https://gitlab.example.com/root"
  },
  "assignees": [{
    "name": "Miss Monserrate Beier",
    "username": "axel.block",
    "id": 12,
    "state": "active",
    "avatar_url": "http://www.gravatar.com/avatar/46f6f7dc858ada7be1853f7fb96e81da?s=80&d=identicon",
    "web_url": "https://gitlab.example.com/axel.block"
  }],
  "reviewers": [{
    "name": "Miss Monserrate Beier",
    "username": "axel.block",
    "id": 12,
    "state": "active",
    "avatar_url": "http://www.gravatar.com/avatar/46f6f7dc858ada7be1853f7fb96e81da?s=80&d=identicon",
    "web_url": "https://gitlab.example.com/axel.block"
  }],
  "source_project_id": 4,
  "target_project_id": 4,
  "labels": [ ],
  "description": "Qui voluptatibus placeat ipsa alias quasi. Deleniti rem ut sint. Optio velit qui distinctio.",
  "draft": false,
  "work_in_progress": false,
  "milestone": {
    "id": 5,
    "iid": 1,
    "project_id": 4,
    "title": "v2.0",
    "description": "Assumenda aut placeat expedita exercitationem labore sunt enim earum.",
    "state": "closed",
    "created_at": "2015-02-02T19:49:26.013Z",
    "updated_at": "2015-02-02T19:49:26.013Z",
    "due_date": null
  },
  "merge_when_pipeline_succeeds": true,
  "merge_status": "can_be_merged",
  "detailed_merge_status": "can_be_merged",
  "subscribed" : true,
  "sha": "8888888888888888888888888888888888888888",
  "merge_commit_sha": null,
  "squash_commit_sha": null,
  "user_notes_count": 1,
  "changes_count": "1",
  "should_remove_source_branch": true,
  "force_remove_source_branch": false,
  "squash": false,
  "web_url": "http://gitlab.example.com/my-group/my-project/merge_requests/1",
  "references": {
    "short": "!1",
    "relative": "!1",
    "full": "my-group/my-project!1"
  },
  "discussion_locked": false,
  "time_stats": {
    "time_estimate": 0,
    "total_time_spent": 0,
    "human_time_estimate": null,
    "human_total_time_spent": null
  },
  "task_completion_status":{
    "count":0,
    "completed_count":0
  },
  "changes": [
    {
    "old_path": "VERSION",
    "new_path": "VERSION",
    "a_mode": "100644",
    "b_mode": "100644",
    "diff": "@@ -1 +1 @@\ -1.9.7\ +1.9.8",
    "new_file": false,
    "renamed_file": false,
    "deleted_file": false
    }
  ],
  "overflow": false
}

병합 요청 차이점 목록

  • generated_file 도입됨 : GitLab 16.9에서 collapse_generated_diff_files라는 플래그로. 기본 설정은 비활성화.
  • GitLab 16.10에서 GitLab.com 및 Self-Managed에서 활성화됨.
  • generated_file 일반 사용 가능 : GitLab 16.11에서 기능 플래그 collapse_generated_diff_files가 제거됨.

병합 요청에서 변경된 파일의 차이점을 나열합니다.

GET /projects/:id/merge_requests/:merge_request_iid/diffs

지원되는 속성:

속성 유형 필수여부 설명
id 정수 또는 문자열 프로젝트의 URL-인코딩 된 경로 또는 ID.
merge_request_iid 정수 병합 요청의 내부 ID.
page 정수 아니오 반환할 결과의 페이지. 기본값은 1입니다.
per_page 정수 아니오 페이지당 결과 수. 기본값은 20입니다.
unidiff 부울 아니오 단일한 차이 형식으로 차이점을 표시합니다. 기본값은 false입니다. GitLab 16.5에서 도입됨.

성공하면 200 OK 및 다음 응답 속성이 반환됩니다:

속성 유형 설명
old_path 문자열 파일의 이전 경로.
new_path 문자열 파일의 새 경로.
a_mode 문자열 파일의 이전 파일 모드.
b_mode 문자열 파일의 새 파일 모드.
diff 문자열 파일에 대한 변경 사항의 차이 표현.
new_file 부울 파일이 새로 추가되었는지를 나타냅니다.
renamed_file 부울 파일이 이름이 바뀌었는지를 나타냅니다.
deleted_file 부울 파일이 제거되었는지를 나타냅니다.
generated_file 부울 파일이 생성된 것으로 표시됨. GitLab 16.9에서 도입됨.

예시 요청: shell curl --header "PRIVATE-TOKEN: <your_access_token>" \ --url "https://gitlab.example.com/api/v4/projects/1/merge_requests/1/diffs?page=1&per_page=2"

예시 응답: json [ { "old_path": "README", "new_path": "README", "a_mode": "100644", "b_mode": "100644", "diff": "@@ -1 +1 @@\ -Title\ +README", "new_file": false, "renamed_file": false, "deleted_file": false, "generated_file": false }, { "old_path": "VERSION", "new_path": "VERSION", "a_mode": "100644", "b_mode": "100644", "diff": "@@\ -1.9.7\ +1.9.8", "new_file": false, "renamed_file": false, "deleted_file": false, "generated_file": false } ]

참고: 이 엔드포인트는 병합 요청 차이점 제한의 영향을 받습니다. 차이점 제한을 초과하는 병합 요청은 제한된 결과를 반환합니다.

병합 요청 파이프라인 목록

병합 요청 파이프라인 목록을 가져옵니다.

GET /projects/:id/merge_requests/:merge_request_iid/pipelines

지원되는 속성:

속성 유형 필수여부 설명
id 정수 또는 문자열 프로젝트의 URL-인코딩 된 경로 또는 ID.
merge_request_iid 정수 병합 요청의 내부 ID.

병합 요청 파이프라인 목록을 제한하려면 페이지네이션 매개변수 pageper_page를 사용하세요.

예시 응답: json [ { "id": 77, "sha": "959e04d7c7a30600c894bd3c0cd0e1ce7f42c11d", "ref": "main", "status": "success" } ]

병합 요청 파이프라인 생성

병합 요청을 위한 새로운 파이프라인을 생성합니다. 이 엔드포인트에서 생성된 파이프라인은 일반 브랜치/태그 파이프라인을 실행하지 않습니다. 작업을 만들려면 .gitlab-ci.ymlonly: [merge_requests]로 구성하세요.

새로운 파이프라인은 다음과 같을 수 있습니다:

POST /projects/:id/merge_requests/:merge_request_iid/pipelines

지원되는 속성:

속성 유형 필수여부 설명
id 정수 또는 문자열 프로젝트의 URL-인코딩 된 경로 또는 ID.
merge_request_iid 정수 병합 요청의 내부 ID.

예시 응답: json { "id": 2, "sha": "b83d6e391c22777fca1ed3012fce84f633d7fed0", "ref": "refs/merge-requests/1/head", "status": "pending", "web_url": "http://localhost/user1/project1/pipelines/2", "before_sha": "0000000000000000000000000000000000000000", "tag": false, "yaml_errors": null, "user": { "id": 1, "name": "John Doe1", "username": "user1", "state": "active", "avatar_url": "https://www.gravatar.com/avatar/c922747a93b40d1ea88262bf1aebee62?s=80&d=identicon", "web_url": "http://example.com" }, "created_at": "2019-09-04T19:20:18.267Z", "updated_at": "2019-09-04T19:20:18.459Z", "started_at": null, "finished_at": null, "committed_at": null, "duration": null, "coverage": null, "detailed_status": { "icon": "status_pending", "text": "pending", "label": "pending", "group": "pending", "tooltip": "pending", "has_details": false, "details_path": "/user1/project1/pipelines/2", "illustration": null, "favicon": "/assets/ci_favicons/favicon_status_pending-5bdf338420e5221ca24353b6bff1c9367189588750632e9a871b7af09ff6a2ae.png" } }

MR 생성

새로운 병합 요청을 생성합니다.

POST /projects/:id/merge_requests
속성 유형 필요 여부 설명
id 정수 또는 문자열 프로젝트의 ID 또는 URL 인코딩 된 경로
source_branch 문자열 소스 브랜치
target_branch 문자열 대상 브랜치
title 문자열 MR의 제목
allow_collaboration 부울 아니요 대상 브랜치에 병합할 수 있는 회원의 커밋을 허용합니다.
approvals_before_merge 정수 아니요 병합 요청이 병합되기 전에 필요한 승인 수 (아래 참조). 승인 규칙을 구성하려면 병합 요청 승인 API를 참조하세요. GitLab 16.0 이하에서는 폐지됨 (프리미엄 및 얼티밋 전용)
allow_maintainer_to_push 부울 아니요 allow_collaboration의 별칭
assignee_id 정수 아니요 담당자 사용자 ID
assignee_ids 정수 배열 아니요 병합 요청을 할당할 사용자의 ID. 모든 담당자 해제하려면 0을 설정하거나 빈 값을 제공합니다.
description 문자열 아니요 병합 요청 설명. 1,048,576자로 제한됩니다.
labels 문자열 아니요 병합 요청의 라벨로 쉼표로 구분된 목록입니다. 라벨이 이미 없는 경우 새 프로젝트 라벨이 생성되고 병합 요청에 할당됩니다.
milestone_id 정수 아니요 마일스톤의 전역 ID
remove_source_branch 부울 아니요 병합할 때 소스 브랜치를 제거해야 하는지 여부를 나타내는 플래그
reviewer_ids 정수 배열 아니요 병합 요청에 리뷰어로 추가된 사용자의 ID. 0으로 설정하거나 비워둘 경우 리뷰어가 추가되지 않습니다.
squash 부울 아니요 true이면 모든 커밋을 병합시 하나의 커밋으로 스쿼시합니다. 프로젝트 설정이 이 값을 재정의할 수 있습니다.
target_project_id 정수 아니요 대상 프로젝트의 숫자 ID

예시 응답:

{
  "id": 1,
  "iid": 1,
  "project_id": 3,
  "title": "test1",
  "description": "fixed login page css paddings",
  "state": "merged",
  "imported": false,
  "imported_from": "none",
  "created_at": "2017-04-29T08:46:00Z",
  "updated_at": "2017-04-29T08:46:00Z",
  "target_branch": "main",
  "source_branch": "test1",
  "upvotes": 0,
  "downvotes": 0,
  "author": {
    "id": 1,
    "name": "Administrator",
    "username": "admin",
    "state": "active",
    "avatar_url": null,
    "web_url" : "https://gitlab.example.com/admin"
  },
  ...

  (중략)

  ...
  
  (중략)

  ...

  "time_stats": {
    "time_estimate": 0,
    "total_time_spent": 0,
    "human_time_estimate": null,
    "human_total_time_spent": null
  },
  "squash": false,
  "subscribed": false,
  "changes_count": "1",
  "merged_by": { // Deprecated and will be removed in API v5, use `merge_user` instead
    "id": 87854,
    "name": "Douwe Maan",
    "username": "DouweM",
    "state": "active",
    "avatar_url": "https://gitlab.example.com/uploads/-/system/user/avatar/87854/avatar.png",
    "web_url": "https://gitlab.com/DouweM"
  },
  "merge_user": {
    "id": 87854,
    "name": "Douwe Maan",
    "username": "DouweM",
    "state": "active",
    "avatar_url": "https://gitlab.example.com/uploads/-/system/user/avatar/87854/avatar.png",
    "web_url": "https://gitlab.com/DouweM"
  },
  "merged_at": "2018-09-07T11:16:17.520Z",
  "merge_after": "2018-09-07T11:16:00.000Z",
  "prepared_at": "2018-09-04T11:16:17.520Z",
  "closed_by": null,
  "closed_at": null,
  "latest_build_started_at": "2018-09-07T07:27:38.472Z",
  "latest_build_finished_at": "2018-09-07T08:07:06.012Z",
  ...

  (중략)

  ...

  (중략)

  ...
}

응답 데이터에 대한 중요 노트는 단일 병합 요청 응답 노트를 참조하세요.

MR 업데이트

기존 병합 요청을 업데이트합니다. 대상 브랜치, 제목 또는 병합 요청을 닫을 수 있습니다.

PUT /projects/:id/merge_requests/:merge_request_iid
속성 유형 필수 여부 설명
id 정수 또는 문자열 프로젝트의 ID 또는 URL-encoded path.
merge_request_iid 정수 병합 요청의 ID.
add_labels 문자열 아니오 병합 요청에 추가할 쉼표로 구분된 라벨 이름. 라벨이 이미 존재하지 않으면, 새 프로젝트 라벨이 생성되고 병합 요청에 할당됩니다.
allow_collaboration 부울 아니오 대상 브랜치로 병합할 수 있는 멤버의 커밋을 허용합니다.
allow_maintainer_to_push 부울 아니오 allow_collaboration의 별칭입니다.
assignee_id 정수 아니오 병합 요청을 할당할 사용자의 ID. 모든 담당자를 할당 해제하려면 0을 설정하거나 빈 값을 제공하세요.
assignee_ids 정수 배열 아니오 병합 요청을 할당할 사용자의 ID. 모든 담당자를 할당 해제하려면 0을 설정하거나 빈 값을 제공하세요.
description 문자열 아니오 병합 요청의 설명. 1,048,576자로 제한됩니다.
discussion_locked 부울 아니오 병합 요청의 토론이 잠겨 있는지 나타내는 플래그입니다. 프로젝트 멤버만 잠긴 토론에 코멘트를 추가, 편집 또는 해결할 수 있습니다.
labels 문자열 아니오 병합 요청을 위한 쉼표로 구분된 라벨 이름. 모든 라벨을 할당 해제하려면 빈 문자열로 설정하세요. 라벨이 이미 존재하지 않으면, 새 프로젝트 라벨이 생성되고 병합 요청에 할당됩니다.
milestone_id 정수 아니오 병합 요청을 할당할 마일스톤의 전역 ID. 마일스톤을 무효화하려면 0을 설정하거나 빈 값을 제공하세요.
remove_labels 문자열 아니오 병합 요청에서 제거할 쉼표로 구분된 라벨 이름.
remove_source_branch 부울 아니오 병합할 때 소스 브랜치를 제거해야 하는지 나타내는 플래그입니다.
reviewer_ids 정수 배열 아니오 병합 요청에 리뷰어로 설정된 사용자의 ID. 모든 리뷰어를 설정 해제하려면 0을 설정하거나 빈 값을 제공하세요.
squash 부울 아니오 true일 경우 모든 커밋을 병합 시 단일 커밋으로 통합합니다. 프로젝트 설정에서 본 값이 무시될 수 있습니다.
state_event 문자열 아니오 새 상태 (close/reopen).
target_branch 문자열 아니오 대상 브랜치.
title 문자열 아니오 병합 요청의 제목.

위의 필수 사항 중 하나 이상을 포함해야 합니다.

예시 응답:

{
  "id": 1,
  "iid": 1,
  "project_id": 3,
  "title": "test1",
  "description": "fixed login page css paddings",
  "state": "merged",
  "created_at": "2017-04-29T08:46:00Z",
  "updated_at": "2017-04-29T08:46:00Z",
  "target_branch": "main",
  "source_branch": "test1",
  "upvotes": 0,
  "downvotes": 0,
  "author": {
    "id": 1,
    "name": "Administrator",
    "username": "admin",
    "state": "active",
    "avatar_url": null,
    "web_url" : "https://gitlab.example.com/admin"
  },
  ... (중략)
}

응답 데이터에 대한 중요한 참고 사항은 단일 병합 요청 응답 노트를 참조하세요.

병합 요청 삭제

관리자 및 프로젝트 소유자 전용입니다. 해당 병합 요청을 삭제합니다.

DELETE /projects/:id/merge_requests/:merge_request_iid
속성 유형 필수 여부 설명
id 정수 또는 문자열 프로젝트의 ID 또는 URL-인코딩 된 경로.
merge_request_iid 정수 병합 요청의 내부 ID.
curl --request DELETE \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/4/merge_requests/85"

병합 요청 병합

병합 요청에 제출된 변경 사항을 수락하고 병합하는 데에 이 API를 사용하세요.

PUT /projects/:id/merge_requests/:merge_request_iid/merge

지원되는 속성:

속성 유형 필수 여부 설명
id 정수 또는 문자열 프로젝트의 ID 또는 URL-인코딩 된 경로.
merge_request_iid 정수 병합 요청의 내부 ID.
merge_commit_message 문자열 아니오 사용자 정의 병합 커밋 메시지.
merge_when_pipeline_succeeds 부울 아니오 true 인 경우, 파이프라인이 성공하면 병합 요청이 병합됩니다.
sha 문자열 아니오 있으면, 이 SHA는 소스 브랜치의 HEAD와 일치해야하며, 그렇지 않으면 병합이 실패합니다.
should_remove_source_branch 부울 아니오 true이면 소스 브랜치를 제거합니다.
squash_commit_message 문자열 아니오 사용자 정의 스쿼시 커밋 메시지.
squash 부울 아니오 true 인 경우 병합시 모든 커밋을 단일 커밋으로 스쿼시합니다.

이 API는 실패 시 특정 HTTP 상태 코드를 반환합니다.

HTTP 상태 코드 메시지 이유
401 401 Unauthorized 사용자가 이 병합 요청을 수락할 권한이 없습니다.
405 405 Method Not Allowed 병합 요청을 병합할 수 없습니다.
409 SHA does not match HEAD of source branch 제공된 sha 매개변수가 소스의 HEAD와 일치하지 않음.
422 Branch cannot be merged 병합 요청이 병합에 실패했습니다.

응답 데이터에 대한 중요한 참고 사항은 단일 병합 요청 응답 참고 사항을 참조하세요.

예시 응답:

{
  "id": 1,
  "iid": 1,
  "project_id": 3,
  "title": "test1",
  "description": "fixed login page css paddings",
  "state": "merged",
  "created_at": "2017-04-29T08:46:00Z",
  "updated_at": "2017-04-29T08:46:00Z",
  "target_branch": "main",
  "source_branch": "test1",
  "upvotes": 0,
  ...
  (내용이 길어 짧게 줄임)
  ...
  "merged_at": "2018-09-07T11:16:17.520Z",
  "merge_after": "2018-09-07T11:16:00.000Z",
  "prepared_at": "2018-09-04T11:16:17.520Z",
  "closed_by": null,
  "closed_at": null,
  ...
  (내용이 길어 짧게 줄임)
  ...
}

기본 병합 참조 경로로 병합

병합 요청 소스 및 대상 브랜치 사이의 변경 사항을 가능한 경우 대상 프로젝트 저장소의 refs/merge-requests/:iid/merge 참조로 병합합니다. 이 참조는 일반적인 병합 작업이 수행된 경우 대상 브랜치가 갖게 될 상태를 나타냅니다.

이 작업은 일반적인 병합 작업이 아니며, 병합 요청 대상 브랜치 상태를 어떤 방식으로든 변경하지 않습니다.

이 참조인 (refs/merge-requests/:iid/merge)는 API에 요청을 보낼 때 덮어씌워지지 않지만, 최신 상태를 가지도록 합니다.

GET /projects/:id/merge_requests/:merge_request_iid/merge_ref

지원되는 속성:

속성 유형 필수 설명
id 정수 또는 문자열 프로젝트의 ID 또는 URL-인코딩된 경로.
merge_request_iid 정수 병합 요청의 내부 ID.

이 API는 특정 HTTP 상태 코드를 반환합니다:

HTTP 상태 코드 메시지 이유
200 (없음) 성공. refs/merge-requests/:iid/merge의 HEAD 커밋을 반환합니다.
400 Merge request is not mergeable 병합 요청에 충돌이 있습니다.
400 Merge ref cannot be updated  
400 Unsupported operation GitLab 데이터베이스가 읽기 전용 모드에 있습니다.

예시 응답:

{
  "commit_id": "854a3a7a17acbcc0bbbea170986df1eb60435f34"
}

파이프라인 성공 시 병합 취소

POST /projects/:id/merge_requests/:merge_request_iid/cancel_merge_when_pipeline_succeeds

지원되는 속성:

속성 유형 필수 설명
id 정수 또는 문자열 프로젝트의 ID 또는 URL-인코딩된 경로.
merge_request_iid 정수 병합 요청의 내부 ID.

이 API는 특정 HTTP 상태 코드를 반환합니다:

HTTP 상태 코드 메시지 이유
201 (없음) 성공 또는 병함 요청은 이미 병합되었습니다.
406 Can't cancel the automatic merge 병합 요청이 닫혀 있습니다.

응답 데이터에 대한 중요한 참고 사항은 단일 병합 요청 응답 참고 사항을 참조하십시오.

예시 응답:

{
  "id": 1,
  "iid": 1,
  "project_id": 3,
  "title": "test1",
  "description": "fixed login page css paddings",
  "state": "merged",
  "created_at": "2017-04-29T08:46:00Z",
  "updated_at": "2017-04-29T08:46:00Z",
  "target_branch": "main",
  "source_branch": "test1",
  "upvotes": 0,
  "downvotes": 0,
  "author": {
    "id": 1,
    "name": "Administrator",
    "username": "admin",
    "state": "active",
    "avatar_url": null,
    "web_url" : "https://gitlab.example.com/admin"
  },
  "assignee": {
    "id": 1,
    "name": "Administrator",
    "username": "admin",
    "state": "active",
    "avatar_url": null,
    "web_url" : "https://gitlab.example.com/admin"
  },
  "assignees": [{
    "name": "Miss Monserrate Beier",
    "username": "axel.block",
    "id": 12,
    "state": "active",
    "avatar_url": "http://www.gravatar.com/avatar/46f6f7dc858ada7be1853f7fb96e81da?s=80&d=identicon",
    "web_url": "https://gitlab.example.com/axel.block"
  }],
  "reviewers": [{
    "name": "Miss Monserrate Beier",
    "username": "axel.block",
    "id": 12,
    "state": "active",
    "avatar_url": "http://www.gravatar.com/avatar/46f6f7dc858ada7be1853f7fb96e81da?s=80&d=identicon",
    "web_url": "https://gitlab.example.com/axel.block"
  }],
  "source_project_id": 2,
  "target_project_id": 3,
  "labels": [
    "Community contribution",
    "Manage"
  ],
  "draft": false,
  "work_in_progress": false,
  "milestone": {
    "id": 5,
    "iid": 1,
    "project_id": 3,
    "title": "v2.0",
    "description": "Assumenda aut placeat expedita exercitationem labore sunt enim earum.",
    "state": "closed",
    "created_at": "2015-02-02T19:49:26.013Z",
    "updated_at": "2015-02-02T19:49:26.013Z",
    "due_date": "2018-09-22",
    "start_date": "2018-08-08",
    "web_url": "https://gitlab.example.com/my-group/my-project/milestones/1"
  },
  "merge_when_pipeline_succeeds": false,
  "merge_status": "can_be_merged",
  "detailed_merge_status": "not_open",
  "merge_error": null,
  "sha": "8888888888888888888888888888888888888888",
  "merge_commit_sha": null,
  "squash_commit_sha": null,
  "user_notes_count": 1,
  "discussion_locked": null,
  "should_remove_source_branch": true,
  "force_remove_source_branch": false,
  "allow_collaboration": false,
  "allow_maintainer_to_push": false,
  "web_url": "http://gitlab.example.com/my-group/my-project/merge_requests/1",
  "references": {
    "short": "!1",
    "relative": "!1",
    "full": "my-group/my-project!1"
  },
  "time_stats": {
    "time_estimate": 0,
    "total_time_spent": 0,
    "human_time_estimate": null,
    "human_total_time_spent": null
  },
  "squash": false,
  "subscribed": false,
  "changes_count": "1",
  "merged_by": { // Deprecated and will be removed in API v5, use `merge_user` instead
    "id": 87854,
    "name": "Douwe Maan",
    "username": "DouweM",
    "state": "active",
    "avatar_url": "https://gitlab.example.com/uploads/-/system/user/avatar/87854/avatar.png",
    "web_url": "https://gitlab.com/DouweM"
  },
  "merge_user": {
    "id": 87854,
    "name": "Douwe Maan",
    "username": "DouweM",
    "state": "active",
    "avatar_url": "https://gitlab.example.com/uploads/-/system/user/avatar/87854/avatar.png",
    "web_url": "https://gitlab.com/DouweM"
  },
  "merged_at": "2018-09-07T11:16:17.520Z",
  "merge_after": "2018-09-07T11:16:00.000Z",
  "prepared_at": "2018-09-04T11:16:17.520Z",
  "closed_by": null,
  "closed_at": null,
  "latest_build_started_at": "2018-09-07T07:27:38.472Z",
  "latest_build_finished_at": "2018-09-07T08:07:06.012Z",
  "first_deployed_to_production_at": null,
  "pipeline": {
    "id": 29626725,
    "sha": "2be7ddb704c7b6b83732fdd5b9f09d5a397b5f8f",
    "ref": "patch-28",
    "status": "success",
    "web_url": "https://gitlab.example.com/my-group/my-project/pipelines/29626725"
  },
  "diff_refs": {
    "base_sha": "c380d3acebd181f13629a25d2e2acca46ffe1e00",
    "head_sha": "2be7ddb704c7b6b83732fdd5b9f09d5a397b5f8f",
    "start_sha": "c380d3acebd181f13629a25d2e2acca46ffe1e00"
  },
  "diverged_commits_count": 2,
  "task_completion_status":{
    "count":0,
    "completed_count":0
  }
}

머지 요청 리베이스

머지 요청의 source_branch를 자동으로 해당 target_branch에 맞춰 리베이스합니다.

PUT /projects/:id/merge_requests/:merge_request_iid/rebase
속성 유형 필수여부 설명
id 정수 또는 문자열 Yes 프로젝트의 ID 또는 URL 인코딩된 경로.
merge_request_iid 정수 Yes 머지 요청의 내부 ID.
skip_ci 부울 No CI 파이프라인 생성을 건너뛰려면 true로 설정합니다.
curl --request PUT \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/76/merge_requests/1/rebase"

이 API는 특정 HTTP 상태 코드를 반환합니다:

HTTP 상태 메시지 이유
202 (메시지 없음) 성공적으로 대기열에 넣었습니다.
403 소스 브랜치로 푸시할 수 없음 머지 요청의 소스 브랜치로 푸시할 권한이 없습니다.
403 소스 브랜치가 존재하지 않음 머지 요청의 소스 브랜치로 푸시할 권한이 없습니다.
403 소스 브랜치가 강제 푸시로부터 보호됨 머지 요청의 소스 브랜치로 푸시할 권한이 없습니다.
409 리베이스 작업을 대기열에 넣지 못함 장기 트랜잭션이 요청을 차단했을 수 있습니다.

요청이 성공적으로 대기열에 추가되면 응답에는 다음이 포함됩니다:

{
  "rebase_in_progress": true
}

반환된 결과에서 비동기 요청의 상태를 확인하려면 include_rebase_in_progress 매개변수를 사용하여 단일 MR 가져오기 엔드포인트를 폴링할 수 있습니다. 리베이스 작업이 진행 중인 경우 응답에는 다음이 포함됩니다:

{
  "rebase_in_progress": true,
  "merge_error": null
}

리베이스 작업이 성공적으로 완료된 후 응답은 다음을 포함합니다:

{
  "rebase_in_progress": false,
  "merge_error": null
}

리베이스 작업이 실패하는 경우 응답은 다음을 포함합니다:

{
  "rebase_in_progress": false,
  "merge_error": "리베이스 실패. 로컬에서 리베이스하십시오"
}

머지 요청에 대한 코멘트

notes 리소스를 사용하여 코멘트를 생성합니다.

머지 시 닫히는 이슈 목록

제공된 머지 요청을 병합함으로써 닫히는 모든 이슈를 가져옵니다.

GET /projects/:id/merge_requests/:merge_request_iid/closes_issues

지원되는 속성:

속성 유형 필수여부 설명
id 정수 또는 문자열 Yes ID 또는 URL 인코딩된 경로.
merge_request_iid 정수 Yes 머지 요청의 내부 ID.

성공하면 GitLab 이슈 트래커를 사용할 때 200 OK와 아래와 같은 응답 속성을 반환합니다:

속성 유형 설명
[].assignee 객체 이 이슈의 첫 번째 담당자입니다.
[].assignees 배열 이슈의 담당자입니다.
[].author 객체 이 이슈를 생성한 사용자입니다.
[].blocking_issues_count 정수 이 이슈가 차단하고 있는 이슈 수입니다.
[].closed_at 날짜시간 이슈가 닫힌 시점입니다.
[].closed_by 객체 이 문제를 닫은 사용자입니다.
[].confidential 부울 이 문제가 비공개인지를 나타냅니다.
[].created_at 날짜시간 이 문제가 생성된 시점입니다.
[].description 문자열 이 문제의 설명입니다.
[].discussion_locked 부울 이 문제의 코멘트가 회원만에게 제한되었는지를 나타냅니다.
[].downvotes 정수 이 문제가 받은 싫어요의 수입니다.
[].due_date 날짜시간 이 문제의 만기일입니다.
[].id 정수 이 문제의 ID입니다.
[].iid 정수 이 문제의 내부 ID입니다.
[].issue_type 문자열 문제 종류입니다. issue, incident, test_case, requirement, task가 될 수 있습니다.
[].labels 배열 문제의 라벨입니다.
[].merge_requests_count 정수 머지 요청이 문제를 닫는 데 필요한 수입니다.
[].milestone 객체 문제의 마일스톤입니다.
[].project_id 정수 문제 프로젝트의 ID입니다.
[].state 문자열 문제의 상태입니다. opened 또는 closed가 될 수 있습니다.
[].task_completion_status 객체 문제에 대한 작업 완료 상태입니다. countcompleted count를 포함합니다.
[].time_stats 객체 문제에 대한 시간 통계입니다. time_estimate, total_time_spent, human_time_estimate, human_total_time_spent를 포함합니다.
[].title 문자열 문제의 제목입니다.
[].type 문자열 문제의 종류입니다. issue_type와 동일하지만 대문자로 표시됩니다.
[].updated_at 날짜시간 문제가 마지막으로 업데이트된 시점입니다.
[].upvotes 정수 이 문제가 받은 좋아요의 수입니다.
[].user_notes_count 정수 문제의 사용자 코멘트 수입니다.
[].web_url 문자열 문제의 웹 URL입니다.
[].weight 정수 문제의 가중치입니다.

성공하면 외부 이슈 트래커(예: Jira와 같은)를 사용할 때도 200 OK와 아래와 같은 응답 속성을 반환합니다:

속성 유형 설명
[].id 정수 이 문제의 ID입니다.
[].title 문자열 이 문제의 제목입니다.

예시 요청:

curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/76/merge_requests/1/closes_issues"

GitLab 이슈 트래커를 사용할 때의 예시 응답:

[
  {
    "id": 76,
    "iid": 6,
    "project_id": 1,
    "title": "Consequatur vero maxime deserunt laboriosam est voluptas dolorem.",
    "description": "Ratione dolores corrupti mollitia soluta quia.",
    "state": "opened",
    "created_at": "2024-09-06T10:58:49.002Z",
    "updated_at": "2024-09-06T11:01:40.710Z",
    "closed_at": null,
    "closed_by": null,
    "labels": [
      "label"
    ],
    "milestone": {
      "project_id": 1,
      "description": "Ducimus nam enim ex consequatur cumque ratione.",
      "state": "closed",
      "due_date": null,
      "iid": 2,
      "created_at": "2016-01-04T15:31:39.996Z",
      "title": "v4.0",
      "id": 17,
      "updated_at": "2016-01-04T15:31:39.996Z"
    },
    "assignees": [
      {
        "id": 1,
        "username": "root",
        "name": "Administrator",
        "state": "active",
        "locked": false,
        "avatar_url": null,
        "web_url": "https://gitlab.example.com/root"
      }
    ],
    "author": {
      "id": 18,
      "username": "eileen.lowe",
      "name": "Alexandra Bashirian",
      "state": "active",
      "locked": false,
      "avatar_url": null,
      "web_url": "https://gitlab.example.com/eileen.lowe"
    },
    "type": "ISSUE",
    "assignee": {
      "id": 1,
      "username": "root",
      "name": "Administrator",
      "state": "active",
      "locked": false,
      "avatar_url": null,
      "web_url": "https://gitlab.example.com/root"
    },
    "user_notes_count": 1,
    "merge_requests_count": 1,
    "upvotes": 0,
    "downvotes": 0,
    "due_date": null,
    "confidential": false,
    "discussion_locked": null,
    "issue_type": "issue",
    "web_url": "https://gitlab.example.com/my-group/my-project/-/issues/6",
    "time_stats": {
      "time_estimate": 0,
      "total_time_spent": 0,
      "human_time_estimate": null,
      "human_total_time_spent": null
    },
    "task_completion_status": {
      "count": 0,
      "completed_count": 0
    },
    "weight": null,
    "blocking_issues_count": 0
 }
]

외부 이슈 트래커를 사용할 때의 예시 응답:

[
   {
       "id" : "PROJECT-123",
       "title" : "이 문제의 제목"
   }
]

병합 요청과 관련된 이슈 목록

병합 요청의 제목, 설명, 커밋 메시지, 댓글 및 토론에서 모든 관련 이슈를 가져옵니다.

GET /projects/:id/merge_requests/:merge_request_iid/related_issues
속성 유형 필수 여부 설명
id 정수 또는 문자열 프로젝트의 ID 또는 URL로 인코딩된 경로입니다.
merge_request_iid 정수 병합 요청의 내부 ID입니다.
curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/76/merge_requests/1/related_issues"

GitLab 이슈 추적기를 사용하는 경우의 예시 응답:

[
   {
      "state" : "opened",
      "description" : "Ratione dolores corrupti mollitia soluta quia.",
      "author" : {
         "state" : "active",
         "id" : 18,
         "web_url" : "https://gitlab.example.com/eileen.lowe",
         "name" : "Alexandra Bashirian",
         "avatar_url" : null,
         "username" : "eileen.lowe"
      },
      "milestone" : {
         "project_id" : 1,
         "description" : "Ducimus nam enim ex consequatur cumque ratione.",
         "state" : "closed",
         "due_date" : null,
         "iid" : 2,
         "created_at" : "2016-01-04T15:31:39.996Z",
         "title" : "v4.0",
         "id" : 17,
         "updated_at" : "2016-01-04T15:31:39.996Z"
      },
      "project_id" : 1,
      "assignee" : {
         "state" : "active",
         "id" : 1,
         "name" : "Administrator",
         "web_url" : "https://gitlab.example.com/root",
         "avatar_url" : null,
         "username" : "root"
      },
      "updated_at" : "2016-01-04T15:31:51.081Z",
      "id" : 76,
      "title" : "Consequatur vero maxime deserunt laboriosam est voluptas dolorem.",
      "created_at" : "2016-01-04T15:31:51.081Z",
      "iid" : 6,
      "labels" : [],
      "user_notes_count": 1,
      "changes_count": "1"
   }
]

Jira와 같은 외부 이슈 추적기를 사용하는 경우의 예시 응답:

[
   {
       "id" : "PROJECT-123",
       "title" : "Title of this issue"
   }
]

병합 요청 구독

인증된 사용자를 병합 요청에 구독하여 알림을 받습니다.

POST /projects/:id/merge_requests/:merge_request_iid/subscribe
속성 유형 필수 여부 설명
id 정수 또는 문자열 프로젝트의 ID 또는 URL로 인코딩된 경로입니다.
merge_request_iid 정수 병합 요청의 내부 ID입니다.

사용자가 이미 병합 요청에 구독되어 있는 경우, 엔드포인트는 HTTP 304 Not Modified 상태 코드를 반환합니다.

curl --request POST \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/5/merge_requests/17/subscribe"

예시 응답:

{
  "id": 1,
  "iid": 1,
  "project_id": 3,
  "title": "test1",
  "description": "fixed login page css paddings",
  "state": "merged",
  "created_at": "2017-04-29T08:46:00Z",
  "updated_at": "2017-04-29T08:46:00Z",
  "target_branch": "main",
  "source_branch": "test1",
  "upvotes": 0,
  "downvotes": 0,
  "author": {
    "id": 1,
    "name": "Administrator",
    "username": "admin",
    "state": "active",
    "avatar_url": null,
    "web_url" : "https://gitlab.example.com/admin"
  },
  ... (생략)
}

응답 데이터에 대한 중요한 참고 사항은 단일 병합 요청 응답 참고 사항을 참조하세요.

병합 요청 취소

인증된 사용자를 병합 요청에서 구독을 해지하여 해당 병합 요청으로부터 알림을 받지 않습니다.

POST /projects/:id/merge_requests/:merge_request_iid/unsubscribe
속성 유형 필수 여부 설명
id 정수 또는 문자열 프로젝트의 ID 또는 URL 인코딩된 경로
merge_request_iid 정수 병합 요청의 내부 ID
curl --request POST \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/5/merge_requests/17/unsubscribe"

사용자가 병합 요청을 구독하지 않은 경우에는 엔드포인트가 HTTP 304 Not Modified 상태 코드를 반환합니다.

예시 응답:

{
  "id": 1,
  "iid": 1,
  "project_id": 3,
  "title": "test1",
  "description": "fixed login page css paddings",
  "state": "merged",
  "created_at": "2017-04-29T08:46:00Z",
  "updated_at": "2017-04-29T08:46:00Z",
  "target_branch": "main",
  "source_branch": "test1",
  "upvotes": 0,
  "downvotes": 0,
  "author": {
    "id": 1,
    "name": "Administrator",
    "username": "admin",
    "state": "active",
    "avatar_url": null,
    "web_url" : "https://gitlab.example.com/admin"
  },
  ...
  ...
  "diverged_commits_count": 2,
  "task_completion_status":{
    "count":0,
    "completed_count":0
  }
}

응답 데이터에 대한 중요한 참고 사항은 단일 병합 요청 응답 노트를 참조하세요.

할 일 항목 생성

현재 사용자의 병합 요청에 대한 할 일 항목을 수동으로 생성합니다. 해당 병합 요청에 이미 사용자의 할 일 항목이 있는 경우, 이 엔드포인트는 HTTP 304 Not Modified 상태 코드를 반환합니다.

POST /projects/:id/merge_requests/:merge_request_iid/todo
속성 타입 필수 여부 설명
id 정수 또는 문자열 프로젝트의 ID 또는 URL-encoded path.
merge_request_iid 정수 병합 요청의 내부 ID
curl --request POST \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/5/merge_requests/27/todo"

예시 응답:

{
  "id": 113,
  "project": {
    "id": 3,
    "name": "GitLab CI/CD",
    "name_with_namespace": "GitLab Org / GitLab CI/CD",
    "path": "gitlab-ci",
    "path_with_namespace": "gitlab-org/gitlab-ci"
  },
  "author": {
    "name": "Administrator",
    "username": "root",
    "id": 1,
    "state": "active",
    "avatar_url": "http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon",
    "web_url": "https://gitlab.example.com/root"
  },
  "action_name": "marked",
  "target_type": "MergeRequest",
  "target": {
    "id": 27,
    "iid": 7,
    "project_id": 3,
    "title": "Et voluptas laudantium minus nihil recusandae ut accusamus earum aut non.",
    "description": "Veniam sunt nihil modi earum cumque illum delectus. Nihil ad quis distinctio quia. Autem eligendi at quibusdam repellendus.",
    "state": "merged",
    "created_at": "2016-06-17T07:48:04.330Z",
    "updated_at": "2016-07-01T11:14:15.537Z",
    "target_branch": "allow_regex_for_project_skip_ref",
    "source_branch": "backup",
    "upvotes": 0,
    "downvotes": 0,
    "author": {
      "name": "Jarret O'Keefe",
      "username": "francisca",
      "id": 14,
      "state": "active",
      "avatar_url": "http://www.gravatar.com/avatar/a7fa515d53450023c83d62986d0658a8?s=80&d=identicon",
      "web_url": "https://gitlab.example.com/francisca",
      "discussion_locked": false
    },
    "assignee": {
      "name": "Dr. Gabrielle Strosin",
      "username": "barrett.krajcik",
      "id": 4,
      "state": "active",
      "avatar_url": "http://www.gravatar.com/avatar/733005fcd7e6df12d2d8580171ccb966?s=80&d=identicon",
      "web_url": "https://gitlab.example.com/barrett.krajcik"
    },
    "assignees": [{
      "name": "Miss Monserrate Beier",
      "username": "axel.block",
      "id": 12,
      "state": "active",
      "avatar_url": "http://www.gravatar.com/avatar/46f6f7dc858ada7be1853f7fb96e81da?s=80&d=identicon",
      "web_url": "https://gitlab.example.com/axel.block"
    }],
    "reviewers": [{
      "name": "Miss Monserrate Beier",
      "username": "axel.block",
      "id": 12,
      "state": "active",
      "avatar_url": "http://www.gravatar.com/avatar/46f6f7dc858ada7be1853f7fb96e81da?s=80&d=identicon",
      "web_url": "https://gitlab.example.com/axel.block"
    }],
    "source_project_id": 3,
    "target_project_id": 3,
    "labels": [],
    "draft": false,
    "work_in_progress": false,
    "milestone": {
      "id": 27,
      "iid": 2,
      "project_id": 3,
      "title": "v1.0",
      "description": "Quis ea accusantium animi hic fuga assumenda.",
      "state": "active",
      "created_at": "2016-06-17T07:47:33.840Z",
      "updated_at": "2016-06-17T07:47:33.840Z",
      "due_date": null
    },
    "merge_when_pipeline_succeeds": false,
    "merge_status": "unchecked",
    "detailed_merge_status": "not_open",
    "subscribed": true,
    "sha": "8888888888888888888888888888888888888888",
    "merge_commit_sha": null,
    "squash_commit_sha": null,
    "user_notes_count": 7,
    "changes_count": "1",
    "should_remove_source_branch": true,
    "force_remove_source_branch": false,
    "squash": false,
    "web_url": "http://example.com/my-group/my-project/merge_requests/1",
    "references": {
      "short": "!1",
      "relative": "!1",
      "full": "my-group/my-project!1"
    }
  },
  "target_url": "https://gitlab.example.com/gitlab-org/gitlab-ci/merge_requests/7",
  "body": "Et voluptas laudantium minus nihil recusandae ut accusamus earum aut non.",
  "state": "pending",
  "created_at": "2016-07-01T11:14:15.530Z"
}


## 병합 요청 차이 버전 가져오기

병합 요청 차이 버전의 목록을 가져옵니다.

```plaintext
GET /projects/:id/merge_requests/:merge_request_iid/versions
속성 유형 필수 설명
id 문자열 프로젝트의 ID.
merge_request_iid 정수 병합 요청의 내부 ID.

응답에서의 SHAs에 대한 설명은 API 응답의 SHAs를 참조하세요.

curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/1/merge_requests/1/versions"

응답 예제:

[{
  "id": 110,
  "head_commit_sha": "33e2ee8579fda5bc36accc9c6fbd0b4fefda9e30",
  "base_commit_sha": "eeb57dffe83deb686a60a71c16c32f71046868fd",
  "start_commit_sha": "eeb57dffe83deb686a60a71c16c32f71046868fd",
  "created_at": "2016-07-26T14:44:48.926Z",
  "merge_request_id": 105,
  "state": "collected",
  "real_size": "1",
  "patch_id_sha": "d504412d5b6e6739647e752aff8e468dde093f2f"
}, {
  "id": 108,
  "head_commit_sha": "3eed087b29835c48015768f839d76e5ea8f07a24",
  "base_commit_sha": "eeb57dffe83deb686a60a71c16c32f71046868fd",
  "start_commit_sha": "eeb57dffe83deb686a60a71c16c32f71046868fd",
  "created_at": "2016-07-25T14:21:33.028Z",
  "merge_request_id": 105,
  "state": "collected",
  "real_size": "1",
  "patch_id_sha": "72c30d1f0115fc1d2bb0b29b24dc2982cbcdfd32"
}]

API 응답의 SHAs

SHA 필드 목적
base_commit_sha 소스 브랜치와 대상 브랜치 사이의 병합 기준 커밋 SHA.
head_commit_sha 소스 브랜치의 최신 커밋.
start_commit_sha 이 차이 버전이 생성된 때의 대상 브랜치의 최신 커밋 SHA.

단일 병합 요청 차이 버전 가져오기

단일 병합 요청 차이 버전을 가져옵니다.

GET /projects/:id/merge_requests/:merge_request_iid/versions/:version_id

지원되는 속성:

속성 유형 필수 설명
id 문자열 프로젝트의 ID.
merge_request_iid 정수 병합 요청의 내부 ID.
version_id 정수 병합 요청 차이 버전의 ID.
unidiff 부울 아니요 통합된 차이 형식으로 차이 표시. 기본값은 false. GitLab 16.5에서 도입됨.

성공 시 200 OK와 다음과 같은 응답 속성을 반환합니다:

속성 유형 설명
id 정수 병합 요청 차이 버전의 ID.
base_commit_sha 문자열 소스 브랜치와 대상 브랜치 사이의 병합 기준 커밋 SHA.
commits 객체 배열 병합 요청 차이에 포함된 커밋.
commits[].id 문자열 커밋의 ID.
commits[].short_id 문자열 커밋의 짧은 ID.
commits[].created_at 날짜 및 시간 커밋 생성 날짜 및 시간.
commits[].parent_ids 배열 부모 커밋의 ID.
   

(중략)

real_size 문자열 병합 요청 차이의 변경 사항 수.
start_commit_sha 문자열 이 차이 버전이 생성된 때의 대상 브랜치의 최신 커밋 SHA.
state 문자열 병합 요청 차이의 상태. collected, overflow, without_files. 폐기된 값: timeout, overflow_commits_safe_size, overflow_diff_files_limit, overflow_diff_lines_limit.

예제 요청:

curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/1/merge_requests/1/versions/1"

응답 예제:

{
  "id": 110,
  "head_commit_sha": "33e2ee8579fda5bc36accc9c6fbd0b4fefda9e30",
  "base_commit_sha": "eeb57dffe83deb686a60a71c16c32f71046868fd",
  "start_commit_sha": "eeb57dffe83deb686a60a71c16c32f71046868fd",
  "created_at": "2016-07-26T14:44:48.926Z",
  "merge_request_id": 105,
  ...

(중략)

  "commits": [{
    "id": "33e2ee8579fda5bc36accc9c6fbd0b4fefda9e30",
    "short_id": "33e2ee85",
    ...
  }, {
    ...
  }, {
    ...
  }],
  "diffs": [{
    "old_path": "LICENSE",
    "new_path": "LICENSE",
    ...
  }]
}

병합 요청에 대한 시간 추정 설정

이 병합 요청에 대한 작업 예상 시간을 설정합니다.

POST /projects/:id/merge_requests/:merge_request_iid/time_estimate
속성 유형 필요 여부 설명
id integer 또는 string 필수 프로젝트의 ID 또는 URL-인코딩된 경로
merge_request_iid integer 필수 병합 요청의 내부 ID
duration string 필수 3h30m과 같은 인간이 이해할 수 있는 형식의 기간
curl --request POST \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/5/merge_requests/93/time_estimate?duration=3h30m"

예시 응답:

{
  "human_time_estimate": "3h 30m",
  "human_total_time_spent": null,
  "time_estimate": 12600,
  "total_time_spent": 0
}

병합 요청에 대한 시간 추정 재설정

이 병합 요청에 대한 예상 시간을 0초로 재설정합니다.

POST /projects/:id/merge_requests/:merge_request_iid/reset_time_estimate
속성 유형 필요 여부 설명
id integer 또는 string 필수 프로젝트의 ID 또는 URL-인코딩된 경로
merge_request_iid integer 필수 프로젝트의 병합 요청의 내부 ID
curl --request POST \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/5/merge_requests/93/reset_time_estimate"

예시 응답:

{
  "human_time_estimate": null,
  "human_total_time_spent": null,
  "time_estimate": 0,
  "total_time_spent": 0
}

병합 요청에 소요된 시간 추가

병합 요청에 대해 사용된 시간을 추가합니다.

POST /projects/:id/merge_requests/:merge_request_iid/add_spent_time
속성 유형 필요 여부 설명
id integer 또는 string 필수 프로젝트의 ID 또는 URL-인코딩된 경로
merge_request_iid integer 필수 병합 요청의 내부 ID
duration string 필수 3h30m과 같은 인간이 이해할 수 있는 형식의 기간
summary string 아니오 시간이 어떻게 사용되었는지에 대한 요약
curl --request POST \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/5/merge_requests/93/add_spent_time?duration=1h"

예시 응답:

{
  "human_time_estimate": null,
  "human_total_time_spent": "1h",
  "time_estimate": 0,
  "total_time_spent": 3600
}

병합 요청에 대한 소요된 시간 재설정

이 병합 요청에 대한 총 소요된 시간을 0초로 재설정합니다.

POST /projects/:id/merge_requests/:merge_request_iid/reset_spent_time
속성 유형 필요 여부 설명
id integer 또는 string 필수 프로젝트의 ID 또는 URL-인코딩된 경로
merge_request_iid integer 필수 프로젝트의 병합 요청의 내부 ID
curl --request POST \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/5/merge_requests/93/reset_spent_time"

예시 응답:

{
  "human_time_estimate": null,
  "human_total_time_spent": null,
  "time_estimate": 0,
  "total_time_spent": 0
}

시간 추적 통계 가져오기

GET /projects/:id/merge_requests/:merge_request_iid/time_stats
속성 유형 필요 여부 설명
id integer 또는 string 필수 프로젝트의 ID 또는 URL-인코딩된 경로
merge_request_iid integer 필수 병합 요청의 내부 ID
curl --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/projects/5/merge_requests/93/time_stats"

예시 응답:

{
  "human_time_estimate": "2h",
  "human_total_time_spent": "1h",
  "time_estimate": 7200,
  "total_time_spent": 3600
}

승인

승인에 대해서는 병합 요청 승인을 확인하십시오.

병합 요청 상태 이벤트 목록

설정된 상태, 수행자 및 발생 시간을 추적하려면 리소스 상태 이벤트 API를 확인하십시오.

문제 해결

새로운 병합 요청의 빈 API 필드

병합 요청을 생성하면 diff_refschanges_count 필드가 처음에는 비어 있습니다. 이러한 필드는 병합 요청을 생성한 후에 비동기적으로 채워집니다. 자세한 내용은 issue 386562 및 GitLab 포럼의 관련 토론을 참조하십시오.