Skip to content

Instantly share code, notes, and snippets.

What would you like to do?
How to move to a fork after cloning

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.

  1. Clone some repo (you've probably already done this step).

    git clone git@github...some-repo.git
  2. Manually fork their repo via the Github website directly.

  3. In your local system, rename your origin remote to upstream.

    git remote rename origin upstream
  4. 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
  5. Fetch from new origin.

    git fetch origin
  6. 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:

    git branch --set-upstream master origin/master (deprecated)

    git branch --set-upstream-to origin/master master
  7. Push to your fork via your "origin" remote (the word origin should be able to be omitted (ie: just write git push) if you did Step 4).

    git push origin

This comment has been minimized.

Copy link

@ThingEngineer ThingEngineer commented Jan 28, 2018

Perfect, thank you!


This comment has been minimized.

Copy link

@azamk100 azamk100 commented Feb 18, 2018

Thank you! Worked great


This comment has been minimized.

Copy link

@MicaelPereira MicaelPereira commented Feb 27, 2018

Thank you!
That's work.


This comment has been minimized.

Copy link

@qzzhang qzzhang commented Mar 1, 2018

Super helpful, thank you!


This comment has been minimized.

Copy link

@kxrob kxrob commented Jul 14, 2020

More simple & robust: After re-sync (fetch/pull..) and fork on simply change the origin (=default) URL to that fork:

git remote set-url origin
git fetch

Optionally add the original remote repo too - as "upstream" or whatever :

git remote add upstream
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment