2019-06-09 18:25:13 -04:00
---
2020-07-28 14:09:36 -04:00
stage: Create
2021-02-22 01:10:57 -05:00
group: Code Review
2020-11-26 01:09:20 -05:00
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
2019-06-09 18:25:13 -04:00
---
2022-01-05 13:13:30 -05:00
# Collaborate on merge requests across forks **(FREE)**
2018-05-22 21:54:57 -04:00
2022-01-05 13:13:30 -05:00
When you open a merge request from your fork, you can allow upstream
members to collaborate with you on your branch.
When you enable this option, members who have permission to merge to the target branch get
permission to write to the merge request's source branch.
The members of the upstream project can then make small fixes or rebase branches
before merging.
2018-05-22 21:54:57 -04:00
This feature is available for merge requests across forked projects that are
2019-01-16 06:52:24 -05:00
publicly accessible.
2018-05-22 21:54:57 -04:00
2022-01-05 13:13:30 -05:00
## Allow commits from upstream members
2018-05-22 21:54:57 -04:00
2022-01-05 13:13:30 -05:00
> Enabled by default in [GitLab 13.7 and later](https://gitlab.com/gitlab-org/gitlab/-/issues/23308).
2019-01-16 06:52:24 -05:00
2022-01-05 13:13:30 -05:00
As the author of a merge request, you can allow commit edits from
upstream members of the project you're contributing to:
2019-01-16 06:52:24 -05:00
2021-06-10 11:10:14 -04:00
1. While creating or editing a merge request, scroll to **Contribution** and
2022-01-05 13:13:30 -05:00
select the **Allow commits from members who can merge to the target branch**
2021-06-10 11:10:14 -04:00
checkbox.
1. Finish creating your merge request.
2019-01-16 06:52:24 -05:00
2022-01-05 13:13:30 -05:00
After you create the merge request, the merge request widget displays the message
**Members who can merge are allowed to add commits**. Upstream members can then
commit directly to your branch, as well as retry the pipelines and jobs of the
merge request.
## Prevent commits from upstream members
2019-01-16 06:52:24 -05:00
2022-01-05 13:13:30 -05:00
As the author of a merge request, you can prevent commit edits from
upstream members of the project you're contributing to:
2019-01-16 06:52:24 -05:00
2022-01-05 13:13:30 -05:00
1. While creating or editing a merge request, scroll to **Contribution** and
clear the **Allow commits from members who can merge to the target branch**
checkbox.
1. Finish creating your merge request.
2019-01-16 06:52:24 -05:00
2022-01-05 13:13:30 -05:00
## Push to the fork as the upstream member
2019-01-16 06:52:24 -05:00
2022-01-05 13:13:30 -05:00
You can push directly to the branch of the forked repository if:
2019-01-16 06:52:24 -05:00
2022-01-05 13:13:30 -05:00
- The author of the merge request has enabled contributions from upstream
members.
- You have at least the [Developer role ](../../permissions.md ) in the
upstream project.
In the following example:
- The forked repository URL is `git@gitlab.com:contributor/forked-project.git` .
- The branch of the merge request is `fork-branch` .
To change or add a commit to the contributor's merge request:
2019-01-16 06:52:24 -05:00
2021-06-10 11:10:14 -04:00
1. Open the merge request page, and select the **Overview** tab.
2022-01-05 13:13:30 -05:00
1. Scroll to the merge request widget, and select **Check out branch** .
1. In the modal window, select **Copy** (**{copy-to-clipboard}**).
1. In your terminal, navigate to your cloned version of the repository, and
paste the commands. For example:
2019-01-16 06:52:24 -05:00
2020-01-30 10:09:15 -05:00
```shell
2022-01-05 13:13:30 -05:00
git fetch "git@gitlab.com:contributor/forked-project.git" 'fork-branch'
git checkout -b contributor/fork-branch' FETCH_HEAD
2019-01-16 06:52:24 -05:00
```
2022-01-05 13:13:30 -05:00
Those commands fetch the branch from the forked project, and create a local branch
for you to work on.
2018-05-22 21:54:57 -04:00
2022-01-05 13:13:30 -05:00
1. Make your changes to your local copy of the branch, and then commit them.
1. Push your local changes to the forked project. The following command pushes
the local branch `contributor/fork-branch` to the `fork-branch` branch of
the `git@gitlab.com:contributor/forked-project.git` repository:
2018-05-22 21:54:57 -04:00
2020-01-30 10:09:15 -05:00
```shell
2022-01-05 13:13:30 -05:00
git push git@gitlab.com:contributor/forked-project.git contributor/fork-branch:fork-branch
2019-01-16 06:52:24 -05:00
```
2018-05-22 21:54:57 -04:00
2022-01-05 13:13:30 -05:00
If you have amended or squashed any commits, you must force push. Proceed
with caution as this command rewrites the commit history:
```shell
git push --force git@gitlab.com:contributor/forked-project.git contributor/fork-branch:fork-branch
```
Note the colon (`:`) between the two branches. The general scheme is:
```shell
git push < forked_repository_git_url > < local_branch > :< fork_branch >
```
2019-06-09 18:25:13 -04:00
2021-02-16 16:09:23 -05:00
## Troubleshooting
### Pipeline status unavailable from MR page of forked project
2021-06-10 11:10:14 -04:00
When a user forks a project, the permissions of the forked copy are not copied
2021-02-16 16:09:23 -05:00
from the original project. The creator of the fork must grant permissions to the
forked copy before members in the upstream project can view or merge the changes
in the merge request.
2019-06-09 18:25:13 -04:00
2021-02-16 16:09:23 -05:00
To see the pipeline status from the merge request page of a forked project
going back to the original project:
1. Create a group containing all the upstream members.
2021-06-17 20:10:29 -04:00
1. Go to the **Project information > Members** page in the forked project and invite the newly-created
2021-02-16 16:09:23 -05:00
group to the forked project.