Pulling changes from forked repositories

Table of contents

Intro

Imagine this—you are working on a feature in an open–source GitHub repo with a few others. You don’t have write access, so you will need to make forks. If everyone is comfortable, one person can make a fork and give everyone else write access, but that’s not always the easy to coordinate.

Remotes

Your teammate just pushed some changes, how can you pull them into your own fork?

First we need to set up a remote repository, or for short, a remote. This will allow you to interact with other repositories—in this case, your teammates’.

Checking remotes

If you are unsure which remotes you’ve already added, you can always check with this command

$ git remote -v
origin	https://github.com/20jasper/git-tutorial (fetch)
origin	https://github.com/20jasper/git-tutorial (push)

Note that origin isn’t a special keyword—it’s just the default name for a repo’s main remote

Adding new remotes

Typing out the whole url for a remote every time would be confusing, but luckily, each remote can be given a name just like origin.

Let’s say our teammate is called Jimothy, and to keep it simple, let’s use jimothy for the name of the remote as well.

$ git remote add jimothy https://github.com/jimothy/git-tutorial

Just to be safe, let’s check the remotes.

$ git remote -v
jimothy	https://github.com/jimothy/git-tutorial (fetch)
jimothy	https://github.com/jimothy/git-tutorial (push)
origin	https://github.com/20jasper/git-tutorial (fetch)
origin	https://github.com/20jasper/git-tutorial (push)

Great—everything worked! Now you just need to fetch and merge the changes and you’re set.

Fetching changes

To sync the changes made in a remote, run git fetch <remote>

$ git fetch jimothy
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 639 bytes | 106.00 KiB/s, done.
From https://github.com/jimothy/git-tutorial
 * [new branch]      main       -> jimothy/main

Merging changes

At this point, both versions can be merged.

$ git merge jimothy/main
Updating 875fc67..b7568a9

Conclusion

Congratulations You have successfully combined both your work and your teammate’s!