Git workflow for contributing to open source projects
This tutorial explains a workflow for contributing your code to other people's repositories. If you are new to this and have never contributed to an open source repo, this might be helpful.
Forking the repository
The first step is to fork the repository you want to contribute to. Forking a repository is basically creating a new repository that is an exact copy of the original one, and is linked to it.
To fork a repository, click the Fork button in the upper right corner of the repository's page.
Cloning the repository
This step is stright forward. Clone the repo you just forked to your local machine. Be sure to clone the forked repository, not the original one.
By default, Git already added a remote called origin when you cloned the repository. You can see it by running
git remote command. This remote points to your forked repository.
You will need to add one more remote that points back to the original repository. You can do that by running
git remote add <remote_name> <url>. The convention is to call this remote upstream, but you can use any name you want.
Now, if you run
git remote again, you should see two remotes: origin and upstream (assuming that you named the second origin upstream).
Creating a branch, pushing and opening a pull request
You are ready to start making changes to the code. Create and checkout to a new branch by running
git checkout -b <branch_name> command.
Once you've made the changes to the code, commit the changes and push them to github by running
git push origin <branch_name>. Origin in the command denotes that you are pushing changes to the forked repository.
Now go to Github and open a pull request from your branch to the original repository.
Cleanup and maintenance
Once the maintainers merge your pull request (hopefully), you can delete your working branch by running
git branch -d <branch_name>, then run
git push origin main to push the deletion of the branch to your remote repository.
To keep your fork in sync with the original repository, use
git pull upstream main command.