If you are like me you find yourself cloning a repo, making some proposed changes and then deciding to later contributing back using the GitHub Flow convention. Below is a set of instructions I've developed for myself on how to deal with this scenario and an explanation of why it matters based on jagregory's gist.
To follow GitHub flow you should really have created a fork initially as a public representation of the forked repository and the clone that instead. My understanding is that the typical setup would have your local repository pointing to your fork as origin and the original forked repository as upstream so that you can use these keywords in other git commands.
-
Clone some repo (you've probably already done this step).
git clone [email protected]
-
Manually fork their repo via the Github website directly.
-
In your local system, rename your origin remote to upstream.
git remote rename origin upstream
-
Add a new origin which now points to your fork you just made above (instead of to to the original repository).
git remote add origin [email protected]
-
Fetch from new origin.
git fetch origin
-
Make local branch "master" track remote branch "origin/master" (ie: remote branch "master" from remote "origin" which you just set above). See more syntax examples here: https://stackoverflow.com/a/2286030/4561887.
(deprecated)git branch --set-upstream master origin/master
git branch --set-upstream-to origin/master master
-
Push to your fork via your "origin" remote (the word
origin
should be able to be omitted (ie: just writegit push
) if you did Step 4).git push origin