doc/topics/git/forks.md
{{< details >}}
{{< /details >}}
A fork is a personal copy of the repository and all its branches, which you create in a namespace of your choice. You can use forks to propose changes to another project that you don't have access to. For more information, see forking workflows.
You can also update a fork with the GitLab UI.
Prerequisites:
To update your fork from the command line:
Check if an upstream remote repository is configured for your fork:
Clone your fork locally, if you haven't already. For more information, see clone a repository.
View the configured remotes for your fork:
git remote -v
If your fork doesn't have a remote pointing to the original repository, use one of these examples to configure a remote called upstream:
# Set any repository as your upstream after editing <upstream_url>
git remote add upstream <upstream_url>
# Set the main GitLab repository as your upstream
git remote add upstream https://gitlab.com/gitlab-org/gitlab.git
Update your fork:
In your local copy, check out the default branch.
Replace main with the name of your default branch:
git checkout main
[!note] If Git identifies unstaged changes, commit or stash them before continuing.
Fetch the changes from the upstream repository:
git fetch upstream
Pull the changes into your fork. Replace main with the name of the branch you're updating:
git pull upstream main
Push the changes to your fork repository on the server:
git push origin main
GitLab enables collaboration between the upstream project maintainers and the fork owners. For more information, see:
You can push directly to the branch of the forked repository if:
In the following example:
[email protected]:contributor/forked-project.git.fork-branch.To change or add a commit to the contributor's merge request:
In the top bar, select Search or go to and find your project.
Go to Code > Merge requests and find the merge request.
In the upper-right corner, select Code, then select Check out branch.
On the dialog, select Copy ({{< icon name="copy-to-clipboard" >}}).
In your terminal, go to the cloned version of the repository, and paste the commands. For example:
git fetch "[email protected]:contributor/forked-project.git" 'fork-branch'
git checkout -b 'contributor/fork-branch' FETCH_HEAD
These commands fetch the branch from the forked project and create a local branch for you to work on.
Make your changes to the local copy of the branch, and then commit them.
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 [email protected]:contributor/forked-project.git repository:
git push [email protected]:contributor/forked-project.git contributor/fork-branch:fork-branch
If you've amended or squashed any commits, you must use git push --force. Proceed with caution as this command rewrites the commit history.
git push --force [email protected]:contributor/forked-project.git contributor/fork-branch:fork-branch
The colon (:) specifies the source branch and the destination branch. The scheme is:
git push <forked_repository_git_url> <local_branch>:<fork_branch>