Update a fork

Tier: Free, Premium, Ultimate Offering: GitLab.com, Self-managed, GitLab Dedicated

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.

This page describes how to update a fork using Git commands from your command line and how to collaborate across forks.

You can also update a fork with the GitLab UI.

Prerequisites:

To update your fork from the command line:

  1. Check if an upstream remote repository is configured for your fork:

    1. Clone your fork locally, if you haven’t already. For more information, see Clone a repository.
    2. View the configured remotes for your fork:

      git remote -v
      
    3. 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
      
  2. Update your fork:

    1. 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.
    2. Fetch the changes from the upstream repository:

      git fetch upstream
      
    3. Pull the changes into your fork. Replace main with the name of the branch you’re updating:

      git pull upstream main
      
    4. Push the changes to your fork repository on the server:

      git push origin main
      

Collaborate across forks

GitLab enables collaboration between the upstream project maintainers and the fork owners. For more information, see:

Push to a fork as an upstream member

You can push directly to the branch of the forked repository if:

  • The author of the merge request enabled contributions from upstream members.
  • You have at least the Developer role for 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:

  1. On the left sidebar, select Search or go to and find your project.
  2. Go to Code > Merge requests and find the merge request.
  3. In the upper-right corner, select Code, then select Check out branch.
  4. On the dialog, select Copy ().
  5. In your terminal, go to the cloned version of the repository, and paste the commands. For example:

    git fetch "git@gitlab.com: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.

  6. Make your changes to the local copy of the branch, and then commit them.
  7. 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:

    git push git@gitlab.com: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 git@gitlab.com: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>