How to checkout merge request locally, and create new local branch?

Solution 1:

  1. Pull merge request to new branch

    git fetch origin merge-requests/REQUESTID/head:BRANCHNAME

    i.e git fetch origin merge-requests/10/head:file_upload

  2. Checkout to newly created branch

    git checkout BRANCHNAME

    i.e (git checkout file_upload)

OR with single command

git fetch origin merge-requests/REQUESTID/head:BRANCHNAME && git checkout BRANCHNAME

i.e git fetch origin merge-requests/18/head:file_upload && git checkout file_upload

Solution 2:

This is also documented in GitLab online documentation : https://docs.gitlab.com/ee/user/project/merge_requests/reviewing_and_managing_merge_requests.html#checkout-merge-requests-locally-through-the-head-ref

They supply this script (git alias) :

[alias]
    mr = !sh -c 'git fetch $1 merge-requests/$2/head:mr-$1-$2 && git checkout mr-$1-$2' -

Then you can use this command :

git mr origin 4

So a new local branch mr-origin-4 will be created.

Solution 3:

You can also add the line

fetch = +refs/merge-requests/*/head:refs/remotes/origin/merge-requests/*

to your .git/config to have git fetch fetch all merge requests.