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.
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.
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.
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".
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