How to contribute to an open-source GitHub project using your own fork

I just recently joined a new open source project, and there were a few folks on the team who weren't familiar with how to contribute to an open source project by forking your own copy, so I wrote this up for the docs of that project. I figured I'd also share it here.

If you join a new open source project, it's very likely that you won't get direct access to push commits or branches up to the repository itself. So, instead, you'll fork the repo, make the changes on your version of the repo, and then "pull request" your changes back to the original.

Here are the steps to take.

Forking the repo #

Let's use the general-congress-hotline project as an example. First, visit its page on GitHub, and click the "Fork" icon in the upper right of the page.

GitHub Fork Button

This will create a fork of the project under your user account.

Cloning it locally #

Next, clone your local version down to your local machine.

GitHub Clone Button

git clone

You now have a local representation of your fork.

Keeping in sync with the source #

In order to make it easy to keep your fork in sync with the original, add the original as a remote:

git remote add upstream

If you check your remotes (git remote -v), you can now see that you have two "remotes" that your local repo is pointed towards: origin, which points to your repo, and upstream, which points to the original. We'll get to why in a bit.

Spinning up a branch #

Since you want to branch from the development branch, make sure you're on the development branch and it's up-to-date with the source repo. If you just forked it, it always will be—but if there have been a lot of changes to the original repo since you forked it, yours might be out of sync. Here's how to get yours in sync:

git checkout development
git fetch upstream
git merge upstream/development
git push origin development

Now you can spin up your new branch:

git checkout -b my-feature-name

Make your changes, commit them, and push up to your forked repo for that branch:

touch new-file.text
git add new-file.txt
git commit -m "Added new-file.text"
git push origin my-feature-name

Now, you can create a PR in the GitHub user interface. Visit your repo on GitHub and click the "New Pull Request" button, and you can create your PR from there.

GitHub new pull request button

Make sure to explain the purpose, context, and anything else necessary for reviewers to understand the PR. See GitHub's "How to write the perfect pull request".

GitHub sample PR

That's it!

Comments? I'm @stauffermatt on Twitter

Tags: git | github | open source

Matt Stauffer headshot

Hi, I'm Matt Stauffer.

I'm partner & technical director at Tighten Co.

You can find me on Twitter at @stauffermatt

Like what you're reading?

I wrote an entire 450+ page book for O'Reilly: Laravel: Up and Running.

You can order the eBook or print book today.