Jan 9, 2017 | git, github, open source

How to contribute (via pull request) 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 git@github.com:mattstauffer/general-congress-hotline.git

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 https://github.com/StayWokeOrg/general-congress-hotline.git

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 whatever the project's default branch is (this is often master, but in the case of general-congress-hotline it's development), make sure you're on the default 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 on a project where the default branch is development:

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 pull request 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! The pull request will show up to the maintainers of the original repo and they can guide you from there.

Comments? I'm @stauffermatt on Twitter

Tags: git  •  github  •  open source


For quick links to fresh content, and for more thoughts that don't make it to the blog.