You're contributing to an open-source project, and you noticed that your fork is out of sync with the original repository. How can you correct that?

TL;DR version

# Add a new remote upstream repository
git remote add upstream

# Sync your fork
git fetch upstream
git checkout master
git merge upstream/master

Add a new remote upstream repository

You cloned your fork on your laptop and started to work on your issue.

Did you know that your fork is an orphan? If you list the configured remote repository you will only see your fork as origin:

git remote -v
origin (fetch)
origin (push)

There are no signs of parents! Where is the original repository?

We need to configure this information to restore the family relationship by adding a new remote upstream repository:

git remote add upstream

You saved the family! You can now see both the original repository and the fork:

git remote -v
origin (fetch)
origin (push)
upstream (fetch)
upstream (push)

Sync your fork

Everything is now set up. You can sync your fork with only 2 commands.

Be sure you're in the root of your project and also in the master branch. Otherwise, you can check out to the master branch:

git checkout master
Switched to branch 'master'

Now, you have to fetch the changes from the original repository:

git fetch upstream
remote: Enumerating objects: 16, done.
remote: Counting objects: 100% (16/16), done.
remote: Compressing objects: 100% (7/7), done.
remote: Total 7 (delta 5), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (7/7), 1.72 Kio | 160.00 Kio/s, done.
   909ef5a..0b228a8  master     -> upstream/master

And merge the changes in your master branch:

git merge upstream/master
Updating 909ef5a..0b228a8
 node.js/WorkingWithItems/batch-get.js               | 51 ++++++++++++++++++++++++++------------------------
 node.js/WorkingWithItems/batch-write.js             | 95 +++++++++++++++++++++++++++++++++++++++++++++++----------------------------------------------
 node.js/WorkingWithItems/delete-item.js             | 37 ++++++++++++++++++------------------
 node.js/WorkingWithItems/get-item.js                | 31 +++++++++++++++++--------------
 node.js/WorkingWithItems/put-item-conditional.js    | 51 +++++++++++++++++++++++++-------------------------
 node.js/WorkingWithItems/put-item.js                | 49 ++++++++++++++++++++++++------------------------
 node.js/WorkingWithItems/transact-get.js            | 51 ++++++++++++++++++++++++++------------------------
 node.js/WorkingWithItems/transact-write.js          | 79 ++++++++++++++++++++++++++++++++++++++++-------------------------------------
 node.js/WorkingWithItems/update-item-conditional.js | 51 ++++++++++++++++++++++++++------------------------
 node.js/WorkingWithItems/update-item.js             | 47 ++++++++++++++++++++++++----------------------
 10 files changed, 282 insertions(+), 260 deletions(-)

That's it! Your fork is now up to date.

Any questions? Feel free to contact me on Twitter!