Sync a Git Remote Fork with Upstream

I've been working on open-source projects, which requires forking the open-source repository and making changes locally.

Before opening pull requests, it's important to get the latest version from the original open-source repository, and ensure that there are no conflicts with any of my local changes.

Here are some notes on syncing a fork with the upstream repository.

See: GitHub Docs: Syncing a fork

Set Up an Upstream Remote for a Local Git Repository

Configure a remote upstream that points to the upstream (original) repository in Git. This is needed to sync changes you make in a fork with the original repository.

1. Check the remotes for your repository:

$ git remote -v

> origin (fetch)
> origin (push)

2. Specify a new remote, upstream, repository:

$ git remote add upstream

3. Verify the new upstream repository has been added to your remotes:

$ git remote -v

> origin (fetch)
> origin (push)
> upstream (fetch)
> upstream (push)

Sync a Fork: Keep it Up-to-Date with the Upstream Repository

1. Check out your fork's local master branch:

$ git checkout master

> Switched to branch 'master'

2. Fetch the branches and their commits from the upstream repository.

Commits to master will be stored in a local branch, upstream/master.

$ git fetch upstream

> remote: Counting objects: 75, done.
> remote: Compressing objects: 100% (53/53), done.
> remote: Total 62 (delta 27), reused 44 (delta 9)
> Unpacking objects: 100% (62/62), done.
> From
>  * [new branch]      master     -> upstream/master

3. Merge changes from upstream/master into your local master branch.

This syncs your fork's master branch with the upstream repository.

$ git merge upstream/master

> Updating a422352..5fdff0f
> Fast-forward
>  README                    |    9 -------
>                 |    7 ++++++
>  2 files changed, 7 insertions(+), 9 deletions(-)
>  delete mode 100644 README
>  create mode 100644

4. To update your fork on GitHub, you must push your changes.

Syncing your fork only updates your local copy of the repository.

$ git push origin master