Allow collaboration on merge requests across forks

Introduced in GitLab 10.6.

When a user opens a merge request from a fork, they are given the option to allow upstream members to collaborate with them on the source branch. This allows the members of the upstream project to make small fixes or rebase branches before merging, reducing the back and forth of accepting external contributions.

This feature is available for merge requests across forked projects that are publicly accessible.

When enabled for a merge request, members with merge access to the target branch of the project will be granted write permissions to the source branch of the merge request.

Enabling commit edits from upstream members

The feature can only be enabled by users who already have push access to the source project and only lasts while the merge request is open. Once enabled, upstream members will also be able to retry the pipelines and jobs of the merge request:

  1. Enable the contribution while creating or editing a merge request.

    Enable contribution

  2. Once the merge request is created, you'll see that commits from members who can merge to the target branch are allowed.

    Check that contribution is enabled

Pushing to the fork as the upstream member

If the creator of the merge request has enabled contributions from upstream members, you can push directly to the branch of the forked repository.

Assuming that:

  • The forked project URL is [email protected]:thedude/awesome-project.git.
  • The branch of the merge request is update-docs.

Here's how the process would look like:

  1. First, you need to get the changes that the merge request has introduced. Click the Check out branch button that has some pre-populated commands that you can run.

    Check out branch button

  2. Use the copy button to copy the first command and paste them in your terminal:

    git fetch [email protected]:thedude/awesome-project.git update-docs
    git checkout -b thedude-awesome-project-update-docs FETCH_HEAD

    This will fetch the branch of the forked project and then create a local branch based off the fetched branch.

  3. Make any changes you want and commit.

  4. Push to the forked project:

    git push [email protected]:thedude/awesome-project.git thedude-awesome-project-update-docs:update-docs

    Note the colon (:) between the two branches. The above command will push the local branch thedude-awesome-project-update-docs to the update-docs branch of the [email protected]:thedude/awesome-project.git repository.