Skip to main content

Collaborating with Multiple Remotes

In real-world development, you'll often work with multiple remote repositories. You might have the main project repository, your fork, a teammate's fork, or even different environments (staging, production). This lesson teaches you how to manage multiple remotes effectively.

Learning Goals

  • Add and manage multiple remote repositories
  • Fetch and pull from different remotes
  • Push changes to specific remotes
  • Understand when and why to use multiple remotes

Adding Multiple Remotes

By default, when you clone a repository, Git creates a remote called origin. You can add additional remotes using the git remote add command.

Adding a second remote
git remote add upstream https://github.com/original-owner/original-repo.git

This adds a new remote named upstream pointing to the original repository (commonly used when you've forked a project).

Viewing and Managing Remotes

Check what remotes are configured in your repository:

List all remotes
git remote -v

You'll see output like:

origin    https://github.com/your-username/your-fork.git (fetch)
origin https://github.com/your-username/your-fork.git (push)
upstream https://github.com/original-owner/original-repo.git (fetch)
upstream https://github.com/original-owner/original-repo.git (push)

To remove a remote:

Remove a remote
git remote remove upstream
tip

Use descriptive names for your remotes. Common conventions:

  • origin: Your fork or main repository
  • upstream: The original source repository
  • team-member: A teammate's repository
  • staging: Staging environment repository

Fetching from Multiple Remotes

Fetch updates from all remotes simultaneously:

Fetch from all remotes
git fetch --all

Or fetch from a specific remote:

Fetch from specific remote
git fetch upstream

Pulling from Different Remotes

Pull changes from a remote that isn't origin:

Pull from upstream
git pull upstream main

This fetches from the upstream remote and merges its main branch into your current branch.

Pushing to Specific Remotes

By default, git push pushes to origin. To push to a different remote:

Push to specific remote
git push upstream feature-branch

Set a default push remote for your current branch:

Set upstream branch
git push -u upstream feature-branch

After this, you can simply use git push and it will push to upstream/feature-branch.

Real-World Workflow: Syncing a Fork

Here's a common scenario for keeping your fork updated with the original repository:

Sync fork with upstream
# Fetch the latest changes from upstream
git fetch upstream

# Switch to your main branch
git checkout main

# Merge upstream's main into your main
git merge upstream/main

# Push the updated main to your fork
git push origin main
warning

Always make sure you're on the correct branch before merging from upstream. Merging into the wrong branch can cause complex conflicts.

Working with Team Members' Repos

You can add teammates' repositories as remotes to collaborate directly:

Add teammate's repo
git remote add alice https://github.com/alice/project.git
git remote add bob https://github.com/bob/project.git

Then you can fetch their branches and create local tracking branches:

Work with teammate's feature
git fetch alice
git checkout -b alice-feature alice/feature-branch

Common Pitfalls

  • Pushing to the wrong remote: Always double-check which remote you're pushing to, especially when working with sensitive environments
  • Outdated local copies: Remember to fetch from all remotes regularly to stay updated
  • Branch name conflicts: Different remotes might have branches with the same name; use fully qualified names like upstream/main when needed
  • Authentication issues: Each remote might require different credentials; configure SSH keys or tokens accordingly

Summary

Managing multiple remotes is essential for effective collaboration. You can now add, remove, and work with multiple remote repositories, sync forks with upstream sources, and collaborate directly with teammates' repositories while keeping everything organized.

Quiz