commits.md 23.1 KB
Newer Older
1 2 3 4 5 6 7 8 9 10
# Commits API

## List repository commits

Get a list of repository commits in a project.

```
GET /projects/:id/repository/commits
```

11 12
| Attribute | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
13
| `id`      | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user
14
| `ref_name` | string | no | The name of a repository branch or tag or if not given the default branch |
15 16
| `since` | string | no | Only commits after or on this date will be returned in ISO 8601 format YYYY-MM-DDTHH:MM:SSZ |
| `until` | string | no | Only commits before or on this date will be returned in ISO 8601 format YYYY-MM-DDTHH:MM:SSZ |
Tiago Botelho's avatar
Tiago Botelho committed
17 18
| `path` | string | no | The file path |
| `all` | boolean | no | Retrieve every commit from the repository |
19
| `with_stats` | boolean | no | Stats about each commit will be added to the response |
Tiago Botelho's avatar
Tiago Botelho committed
20

21
```bash
22
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/5/repository/commits"
23 24 25
```

Example response:
26 27 28 29 30 31 32 33 34

```json
[
  {
    "id": "ed899a2f4b50b4370feeea94676502b42383c746",
    "short_id": "ed899a2f4b5",
    "title": "Replace sanitize with escape once",
    "author_name": "Dmitriy Zaporozhets",
    "author_email": "dzaporozhets@sphereconsultinginc.com",
35
    "authored_date": "2012-09-20T11:50:22+03:00",
36 37
    "committer_name": "Administrator",
    "committer_email": "admin@example.com",
38
    "committed_date": "2012-09-20T11:50:22+03:00",
39
    "created_at": "2012-09-20T11:50:22+03:00",
40
    "message": "Replace sanitize with escape once",
41 42 43
    "parent_ids": [
      "6104942438c14ec7bd21c6cd5bd995272b3faff6"
    ]
44 45 46 47 48 49 50
  },
  {
    "id": "6104942438c14ec7bd21c6cd5bd995272b3faff6",
    "short_id": "6104942438c",
    "title": "Sanitize for network graph",
    "author_name": "randx",
    "author_email": "dmitriy.zaporozhets@gmail.com",
51 52
    "committer_name": "Dmitriy",
    "committer_email": "dmitriy.zaporozhets@gmail.com",
53
    "created_at": "2012-09-20T09:06:12+03:00",
54
    "message": "Sanitize for network graph",
55 56 57
    "parent_ids": [
      "ae1d9fb46aa2b07ee9836d49862ec4e2c46fbbba"
    ]
58 59 60 61
  }
]
```

Marc Siegfriedt's avatar
Marc Siegfriedt committed
62 63 64 65 66 67 68 69 70 71 72 73
## Create a commit with multiple files and actions

> [Introduced][ce-6096] in GitLab 8.13.

Create a commit by posting a JSON payload

```
POST /projects/:id/repository/commits
```

| Attribute | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
74
| `id` | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) |
75
| `branch` | string | yes | Name of the branch to commit into. To create a new branch, also provide `start_branch`. |
Marc Siegfriedt's avatar
Marc Siegfriedt committed
76
| `commit_message` | string | yes | Commit message |
77
| `start_branch` | string | no | Name of the branch to start the new commit from |
Marc Siegfriedt's avatar
Marc Siegfriedt committed
78 79 80
| `actions[]` | array | yes | An array of action hashes to commit as a batch. See the next table for what attributes it can take. |
| `author_email` | string | no | Specify the commit author's email address |
| `author_name` | string | no | Specify the commit author's name |
81
| `stats` | boolean | no | Include commit stats. Default is true |
82
| `force` | boolean | no | When `true` overwrites the target branch with a new commit based on the `start_branch` |
Marc Siegfriedt's avatar
Marc Siegfriedt committed
83 84 85

| `actions[]` Attribute | Type | Required | Description |
| --------------------- | ---- | -------- | ----------- |
86
| `action` | string | yes | The action to perform, `create`, `delete`, `move`, `update`, `chmod`|
Marc Siegfriedt's avatar
Marc Siegfriedt committed
87
| `file_path` | string | yes | Full path to the file. Ex. `lib/class.rb` |
88
| `previous_path` | string | no | Original full path to the file being moved. Ex. `lib/class1.rb`. Only considered for `move` action. |
89
| `content` | string | no | File content, required for all except `delete`, `chmod`, and `move`. Move actions that do not specify `content` will preserve the existing file content, and any other value of `content` will overwrite the file content. |
Marc Siegfriedt's avatar
Marc Siegfriedt committed
90
| `encoding` | string | no | `text` or `base64`. `text` is default. |
91
| `last_commit_id` | string | no | Last known file commit id. Will be only considered in update, move and delete actions. |
92
| `execute_filemode` | boolean | no | When `true/false` enables/disables the execute flag on the file. Only considered for `chmod` action. |
Marc Siegfriedt's avatar
Marc Siegfriedt committed
93 94 95 96

```bash
PAYLOAD=$(cat << 'JSON'
{
97
  "branch": "master",
Marc Siegfriedt's avatar
Marc Siegfriedt committed
98 99 100 101 102 103 104 105 106
  "commit_message": "some commit message",
  "actions": [
    {
      "action": "create",
      "file_path": "foo/bar",
      "content": "some content"
    },
    {
      "action": "delete",
107
      "file_path": "foo/bar2"
Marc Siegfriedt's avatar
Marc Siegfriedt committed
108 109 110 111 112 113 114 115 116 117 118
    },
    {
      "action": "move",
      "file_path": "foo/bar3",
      "previous_path": "foo/bar4",
      "content": "some content"
    },
    {
      "action": "update",
      "file_path": "foo/bar5",
      "content": "new content"
119 120 121 122 123
    },
    {
      "action": "chmod",
      "file_path": "foo/bar5",
      "execute_filemode": true
Marc Siegfriedt's avatar
Marc Siegfriedt committed
124 125 126 127 128
    }
  ]
}
JSON
)
129
curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" --header "Content-Type: application/json" --data "$PAYLOAD" https://gitlab.example.com/api/v4/projects/1/repository/commits
Marc Siegfriedt's avatar
Marc Siegfriedt committed
130 131 132 133 134 135 136 137 138 139
```

Example response:
```json
{
  "id": "ed899a2f4b50b4370feeea94676502b42383c746",
  "short_id": "ed899a2f4b5",
  "title": "some commit message",
  "author_name": "Dmitriy Zaporozhets",
  "author_email": "dzaporozhets@sphereconsultinginc.com",
140 141
  "committer_name": "Dmitriy Zaporozhets",
  "committer_email": "dzaporozhets@sphereconsultinginc.com",
Marc Siegfriedt's avatar
Marc Siegfriedt committed
142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157
  "created_at": "2016-09-20T09:26:24.000-07:00",
  "message": "some commit message",
  "parent_ids": [
    "ae1d9fb46aa2b07ee9836d49862ec4e2c46fbbba"
  ],
  "committed_date": "2016-09-20T09:26:24.000-07:00",
  "authored_date": "2016-09-20T09:26:24.000-07:00",
  "stats": {
    "additions": 2,
    "deletions": 2,
    "total": 4
  },
  "status": null
}
```

158 159 160 161 162 163 164 165 166 167
## Get a single commit

Get a specific commit identified by the commit hash or name of a branch or tag.

```
GET /projects/:id/repository/commits/:sha
```

Parameters:

168 169
| Attribute | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
170
| `id`      | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user
171
| `sha` | string | yes | The commit hash or name of a repository branch or tag |
172
| `stats` | boolean | no | Include commit stats. Default is true |
173 174

```bash
175
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/5/repository/commits/master
176 177 178
```

Example response:
179 180 181 182 183 184 185 186

```json
{
  "id": "6104942438c14ec7bd21c6cd5bd995272b3faff6",
  "short_id": "6104942438c",
  "title": "Sanitize for network graph",
  "author_name": "randx",
  "author_email": "dmitriy.zaporozhets@gmail.com",
187 188
  "committer_name": "Dmitriy",
  "committer_email": "dmitriy.zaporozhets@gmail.com",
189
  "created_at": "2012-09-20T09:06:12+03:00",
190
  "message": "Sanitize for network graph",
191 192
  "committed_date": "2012-09-20T09:06:12+03:00",
  "authored_date": "2012-09-20T09:06:12+03:00",
193 194
  "parent_ids": [
    "ae1d9fb46aa2b07ee9836d49862ec4e2c46fbbba"
195
  ],
196 197 198 199 200 201
  "last_pipeline" : {
    "id": 8,
    "ref": "master",
    "sha": "2dc6aa325a317eda67812f05600bdf0fcdc70ab0"
    "status": "created"
  }
202 203 204 205 206
  "stats": {
    "additions": 15,
    "deletions": 10,
    "total": 25
  },
207
  "status": "running"
208 209 210
}
```

Robert Schilling's avatar
Robert Schilling committed
211 212 213 214 215
## Get references a commit is pushed to

> [Introduced][ce-15026] in GitLab 10.6

Get all references (from branches or tags) a commit is pushed to.
216
The pagination parameters `page` and `per_page` can be used to restrict the list of references.
Robert Schilling's avatar
Robert Schilling committed
217 218 219 220 221 222 223 224 225 226 227

```
GET /projects/:id/repository/commits/:sha/refs
```

Parameters:

| Attribute | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `id`      | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user
| `sha` | string | yes | The commit hash  |
228
| `type` | string | no | The scope of commits. Possible values `branch`, `tag`, `all`. Default is `all`.  |
Robert Schilling's avatar
Robert Schilling committed
229 230

```bash
231
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/5/repository/commits/5937ac0a7beb003549fc5fd26fc247adbce4a52e/refs?type=all"
Robert Schilling's avatar
Robert Schilling committed
232 233 234 235 236 237
```

Example response:

```json
[
238 239 240 241 242 243
  {"type": "branch", "name": "'test'"},
  {"type": "branch", "name": "add-balsamiq-file"},
  {"type": "branch", "name": "wip"},
  {"type": "tag", "name": "v1.1.0"}
 ]

Robert Schilling's avatar
Robert Schilling committed
244 245
```

246 247 248 249 250 251 252 253 254 255 256 257 258 259
## Cherry pick a commit

> [Introduced][ce-8047] in GitLab 8.15.

Cherry picks a commit to a given branch.

```
POST /projects/:id/repository/commits/:sha/cherry_pick
```

Parameters:

| Attribute | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
260
| `id`      | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user
261 262 263 264
| `sha` | string | yes | The commit hash  |
| `branch` | string | yes | The name of the branch  |

```bash
265
curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" --form "branch=master" "https://gitlab.example.com/api/v4/projects/5/repository/commits/master/cherry_pick"
266 267 268 269 270 271 272 273 274 275 276
```

Example response:

```json
{
  "id": "8b090c1b79a14f2bd9e8a738f717824ff53aebad",
  "short_id": "8b090c1b",
  "title": "Feature added",
  "author_name": "Dmitriy Zaporozhets",
  "author_email": "dmitriy.zaporozhets@gmail.com",
277
  "authored_date": "2016-12-12T20:10:39.000+01:00",
278 279 280
  "created_at": "2016-12-12T20:10:39.000+01:00",
  "committer_name": "Administrator",
  "committer_email": "admin@example.com",
281 282 283 284 285 286
  "committed_date": "2016-12-12T20:10:39.000+01:00",
  "title": "Feature added",
  "message": "Feature added\n\nSigned-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>\n",
  "parent_ids": [
    "a738f717824ff53aebad8b090c1b79a14f2bd9e8"
  ]
287 288 289
}
```

290 291
## Revert a commit

292
> [Introduced][ce-22919] in GitLab 11.5.
293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308

Reverts a commit in a given branch.

```
POST /projects/:id/repository/commits/:sha/revert
```

Parameters:

| Attribute | Type           | Required | Description                                                                     |
| --------- | ----           | -------- | -----------                                                                     |
| `id`      | integer/string | yes      | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) |
| `sha`     | string         | yes      | Commit SHA to revert                                                            |
| `branch`  | string         | yes      | Target branch name                                                              |

```bash
309
curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" --form "branch=master" "https://gitlab.example.com/api/v4/projects/5/repository/commits/a738f717824ff53aebad8b090c1b79a14f2bd9e8/revert"
310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330
```

Example response:

```json
{
  "id":"8b090c1b79a14f2bd9e8a738f717824ff53aebad",
  "short_id": "8b090c1b",
  "title":"Revert \"Feature added\"",
  "created_at":"2018-11-08T15:55:26.000Z",
  "parent_ids":["a738f717824ff53aebad8b090c1b79a14f2bd9e8"],
  "message":"Revert \"Feature added\"\n\nThis reverts commit a738f717824ff53aebad8b090c1b79a14f2bd9e8",
  "author_name":"Administrator",
  "author_email":"admin@example.com",
  "authored_date":"2018-11-08T15:55:26.000Z",
  "committer_name":"Administrator",
  "committer_email":"admin@example.com",
  "committed_date":"2018-11-08T15:55:26.000Z"
}
```

331 332 333 334 335 336 337 338 339 340
## Get the diff of a commit

Get the diff of a commit in a project.

```
GET /projects/:id/repository/commits/:sha/diff
```

Parameters:

341 342
| Attribute | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
343
| `id`      | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user
344 345 346
| `sha` | string | yes | The commit hash or name of a repository branch or tag |

```bash
347
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/5/repository/commits/master/diff"
348 349 350
```

Example response:
351 352 353 354

```json
[
  {
355
    "diff": "--- a/doc/update/5.4-to-6.0.md\n+++ b/doc/update/5.4-to-6.0.md\n@@ -71,6 +71,8 @@\n sudo -u git -H bundle exec rake migrate_keys RAILS_ENV=production\n sudo -u git -H bundle exec rake migrate_inline_notes RAILS_ENV=production\n \n+sudo -u git -H bundle exec rake gitlab:assets:compile RAILS_ENV=production\n+\n ```\n \n ### 6. Update config files",
356 357 358 359 360 361 362 363 364 365
    "new_path": "doc/update/5.4-to-6.0.md",
    "old_path": "doc/update/5.4-to-6.0.md",
    "a_mode": null,
    "b_mode": "100644",
    "new_file": false,
    "renamed_file": false,
    "deleted_file": false
  }
]
```
366 367 368 369 370 371 372 373 374 375 376

## Get the comments of a commit

Get the comments of a commit in a project.

```
GET /projects/:id/repository/commits/:sha/comments
```

Parameters:

377 378
| Attribute | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
379
| `id`      | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user
380 381 382
| `sha` | string | yes | The commit hash or name of a repository branch or tag |

```bash
383
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/5/repository/commits/master/comments"
384 385 386
```

Example response:
387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405

```json
[
  {
    "note": "this code is really nice",
    "author": {
      "id": 11,
      "username": "admin",
      "email": "admin@local.host",
      "name": "Administrator",
      "state": "active",
      "created_at": "2014-03-06T08:17:35.000Z"
    }
  }
]
```

## Post comment to commit

406 407 408 409 410 411 412 413 414 415 416 417 418 419 420
Adds a comment to a commit.

In order to post a comment in a particular line of a particular file, you must
specify the full commit SHA, the `path`, the `line` and `line_type` should be
`new`.

The comment will be added at the end of the last commit if at least one of the
cases below is valid:

- the `sha` is instead a branch or a tag and the `line` or `path` are invalid
- the `line` number is invalid (does not exist)
- the `path` is invalid (does not exist)

In any of the above cases, the response of `line`, `line_type` and `path` is
set to `null`.
421 422 423 424 425

```
POST /projects/:id/repository/commits/:sha/comments
```

426 427
| Attribute | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
428
| `id`      | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user
429 430
| `sha`       | string  | yes | The commit SHA or name of a repository branch or tag |
| `note`      | string  | yes | The text of the comment |
431
| `path`      | string  | no  | The file path relative to the repository |
432
| `line`      | integer | no  | The line number where the comment should be placed |
433 434 435
| `line_type` | string  | no  | The line type. Takes `new` or `old` as arguments |

```bash
436
curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" --form "note=Nice picture man\!" --form "path=dudeism.md" --form "line=11" --form "line_type=new" https://gitlab.example.com/api/v4/projects/17/repository/commits/18f3e63d05582537db6d183d9d557be09e1f90c8/comments
437
```
438

439
Example response:
440 441 442

```json
{
443
   "author" : {
444
      "web_url" : "https://gitlab.example.com/thedude",
445 446 447 448 449 450 451 452 453 454 455
      "avatar_url" : "https://gitlab.example.com/uploads/user/avatar/28/The-Big-Lebowski-400-400.png",
      "username" : "thedude",
      "state" : "active",
      "name" : "Jeff Lebowski",
      "id" : 28
   },
   "created_at" : "2016-01-19T09:44:55.600Z",
   "line_type" : "new",
   "path" : "dudeism.md",
   "line" : 11,
   "note" : "Nice picture man!"
456 457
}
```
458

459 460
## Commit status

461
Since GitLab 8.1, this is the new commit status API.
462

463
### List the statuses of a commit
464

465 466
List the statuses of a commit in a project.
The pagination parameters `page` and `per_page` can be used to restrict the list of references.
467 468 469 470 471

```
GET /projects/:id/repository/commits/:sha/statuses
```

472 473
| Attribute | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
474
| `id`      | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user
475
| `sha`     | string  | yes | The commit SHA
476
| `ref`     | string  | no  | The name of a repository branch or tag or, if not given, the default branch
477 478 479
| `stage`   | string  | no  | Filter by [build stage](../ci/yaml/README.md#stages), e.g., `test`
| `name`    | string  | no  | Filter by [job name](../ci/yaml/README.md#jobs), e.g., `bundler:audit`
| `all`     | boolean | no  | Return all statuses, not only the latest ones
480

481
```bash
482
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/17/repository/commits/18f3e63d05582537db6d183d9d557be09e1f90c8/statuses
483 484 485
```

Example response:
486 487 488

```json
[
489 490 491 492 493 494 495 496 497 498 499
   ...

   {
      "status" : "pending",
      "created_at" : "2016-01-19T08:40:25.934Z",
      "started_at" : null,
      "name" : "bundler:audit",
      "allow_failure" : true,
      "author" : {
         "username" : "thedude",
         "state" : "active",
500
         "web_url" : "https://gitlab.example.com/thedude",
501 502 503 504 505 506 507 508 509 510 511 512 513
         "avatar_url" : "https://gitlab.example.com/uploads/user/avatar/28/The-Big-Lebowski-400-400.png",
         "id" : 28,
         "name" : "Jeff Lebowski"
      },
      "description" : null,
      "sha" : "18f3e63d05582537db6d183d9d557be09e1f90c8",
      "target_url" : "https://gitlab.example.com/thedude/gitlab-ce/builds/91",
      "finished_at" : null,
      "id" : 91,
      "ref" : "master"
   },
   {
      "started_at" : null,
Rémy Coutable's avatar
Rémy Coutable committed
514
      "name" : "test",
515 516 517 518 519 520 521 522 523 524 525 526
      "allow_failure" : false,
      "status" : "pending",
      "created_at" : "2016-01-19T08:40:25.832Z",
      "target_url" : "https://gitlab.example.com/thedude/gitlab-ce/builds/90",
      "id" : 90,
      "finished_at" : null,
      "ref" : "master",
      "sha" : "18f3e63d05582537db6d183d9d557be09e1f90c8",
      "author" : {
         "id" : 28,
         "name" : "Jeff Lebowski",
         "username" : "thedude",
527
         "web_url" : "https://gitlab.example.com/thedude",
528 529 530 531 532 533 534
         "state" : "active",
         "avatar_url" : "https://gitlab.example.com/uploads/user/avatar/28/The-Big-Lebowski-400-400.png"
      },
      "description" : null
   },

   ...
535 536 537
]
```

538
### Post the build status to a commit
539

540
Adds or updates a build status of a commit.
541 542 543 544 545

```
POST /projects/:id/statuses/:sha
```

546 547
| Attribute | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
548
| `id`      | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user
549 550 551 552 553 554
| `sha`     | string  | yes   | The commit SHA
| `state`   | string  | yes   | The state of the status. Can be one of the following: `pending`, `running`, `success`, `failed`, `canceled`
| `ref`     | string  | no    | The `ref` (branch or tag) to which the status refers
| `name` or `context` | string  | no | The label to differentiate this status from the status of other systems. Default value is `default`
| `target_url` |  string  | no  | The target URL to associate with this status
| `description` | string  | no  | The short description of the status
555
| `coverage` | float  | no    | The total code coverage
556 557

```bash
558
curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/17/statuses/18f3e63d05582537db6d183d9d557be09e1f90c8?state=success"
559 560 561
```

Example response:
562 563 564

```json
{
565
   "author" : {
566
      "web_url" : "https://gitlab.example.com/thedude",
567 568 569 570 571 572 573 574 575
      "name" : "Jeff Lebowski",
      "avatar_url" : "https://gitlab.example.com/uploads/user/avatar/28/The-Big-Lebowski-400-400.png",
      "username" : "thedude",
      "state" : "active",
      "id" : 28
   },
   "name" : "default",
   "sha" : "18f3e63d05582537db6d183d9d557be09e1f90c8",
   "status" : "success",
576
   "coverage": 100.0,
577 578 579 580 581 582 583 584
   "description" : null,
   "id" : 93,
   "target_url" : null,
   "ref" : null,
   "started_at" : null,
   "created_at" : "2016-01-19T09:05:50.355Z",
   "allow_failure" : false,
   "finished_at" : "2016-01-19T09:05:50.365Z"
585 586
}
```
Marc Siegfriedt's avatar
Marc Siegfriedt committed
587

588 589
## List Merge Requests associated with a commit

590 591
> [Introduced][ce-18004] in GitLab 10.7.

592 593 594 595 596 597 598 599 600 601 602 603
Get a list of Merge Requests related to the specified commit.

```
GET /projects/:id/repository/commits/:sha/merge_requests
```

| Attribute | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `id`      | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user
| `sha`     | string  | yes   | The commit SHA

```bash
604
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/5/repository/commits/af5b13261899fb2c0db30abdd0af8b07cb44fdc5/merge_requests"
605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656
```

Example response:

```json
[
   {
      "id":45,
      "iid":1,
      "project_id":35,
      "title":"Add new file",
      "description":"",
      "state":"opened",
      "created_at":"2018-03-26T17:26:30.916Z",
      "updated_at":"2018-03-26T17:26:30.916Z",
      "target_branch":"master",
      "source_branch":"test-branch",
      "upvotes":0,
      "downvotes":0,
      "author" : {
        "web_url" : "https://gitlab.example.com/thedude",
        "name" : "Jeff Lebowski",
        "avatar_url" : "https://gitlab.example.com/uploads/user/avatar/28/The-Big-Lebowski-400-400.png",
        "username" : "thedude",
        "state" : "active",
        "id" : 28
      },
      "assignee":null,
      "source_project_id":35,
      "target_project_id":35,
      "labels":[ ],
      "work_in_progress":false,
      "milestone":null,
      "merge_when_pipeline_succeeds":false,
      "merge_status":"can_be_merged",
      "sha":"af5b13261899fb2c0db30abdd0af8b07cb44fdc5",
      "merge_commit_sha":null,
      "user_notes_count":0,
      "discussion_locked":null,
      "should_remove_source_branch":null,
      "force_remove_source_branch":false,
      "web_url":"http://https://gitlab.example.com/root/test-project/merge_requests/1",
      "time_stats":{
         "time_estimate":0,
         "total_time_spent":0,
         "human_time_estimate":null,
         "human_total_time_spent":null
      }
   }
]
```

657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696
## Get GPG signature of a commit

Get the [GPG signature from a commit](../user/project/repository/gpg_signed_commits/index.md),
if it is signed. For unsigned commits, it results in a 404 response.

```
GET /projects/:id/repository/commits/:sha/signature
```

Parameters:

| Attribute | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `id`      | integer/string | yes | The ID or [URL-encoded path of the project](README.md#namespaced-path-encoding) owned by the authenticated user
| `sha` | string | yes | The commit hash or name of a repository branch or tag |

```bash
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/repository/commits/da738facbc19eb2fc2cef57c49be0e6038570352/signature"
```

Example response if commit is signed:

```json
{
  "gpg_key_id": 1,
  "gpg_key_primary_keyid": "8254AAB3FBD54AC9",
  "gpg_key_user_name": "John Doe",
  "gpg_key_user_email": "johndoe@example.com",
  "verification_status": "verified",
  "gpg_key_subkey_id": null
}
```

Example response if commit is unsigned:
```json
{
  "message": "404 GPG Signature Not Found"
}
```

Marc Siegfriedt's avatar
Marc Siegfriedt committed
697
[ce-6096]: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/6096 "Multi-file commit"
698
[ce-8047]: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/8047
Robert Schilling's avatar
Robert Schilling committed
699
[ce-15026]: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/15026
700
[ce-18004]: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/18004
701
[ce-22919]: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/22919