Skip to content

Instantly share code, notes, and snippets.

@CristinaSolana
Created February 22, 2012 14:56
Show Gist options
  • Select an option

  • Save CristinaSolana/1885435 to your computer and use it in GitHub Desktop.

Select an option

Save CristinaSolana/1885435 to your computer and use it in GitHub Desktop.
Keeping a fork up to date

1. Clone your fork:

git clone git@github.com:YOUR-USERNAME/YOUR-FORKED-REPO.git

2. Add remote from original repository in your forked repository:

cd into/cloned/fork-repo
git remote add upstream git://github.com/ORIGINAL-DEV-USERNAME/REPO-YOU-FORKED-FROM.git
git fetch upstream

3. Updating your fork from original repo to keep up with their changes:

git pull upstream master
@CristinaSolana

Copy link
Copy Markdown
Author

Glad it helped @lightkun10 @Chadori @sarahqiao9 @brandnewx

@sourabhdeshmukh

Copy link
Copy Markdown

Thanks it Worked for me. :)

@trillaxe

Copy link
Copy Markdown

thank you!

@CompassTheSolution

Copy link
Copy Markdown

@RatnadeepBiswakarma
git rebase upstream master

should be:

git rebase upstream/master

And it worked great for me, thanks!

@luisriverag

Copy link
Copy Markdown

I built a web based solution to sync the fork with the original using only GitHub APIs. It's all web, you don't need to do anything on the client
https://forkrefresh.herokuapp.com
As a plus it tells you the status off all your repos as compared to sources of the forks.

Thanks, worked really well on 289 forks I hadn't updated in a looooong time!!!

@pramodjodhani

Copy link
Copy Markdown

Thanks a lot 👍

@RodolfoGS

Copy link
Copy Markdown

Thanks!

@kxrob

kxrob commented Aug 4, 2020

Copy link
Copy Markdown

github should add a button / function for doing this frequently needed (fast-forward) re-sync from upstream without needing that triangle process via local repo + commandline. The local repos could cleanly track one remote.

If one does the sync via github pull-request + "switching the base" + normal Merge, a extra merge commit is inserted (because github internally uses merge --no-ff). Via "Rebase and merge" option of the merge button it doesn't create clean history either, rather produces an extended mess ("branch is N commits ahead + N commits behind ..." !) - probably because a 'commited by info' or so is added to the meta data of the commits.

@DahnJ

DahnJ commented Aug 9, 2020

Copy link
Copy Markdown

Thanks for this!

@ValentineDragan

Copy link
Copy Markdown

The only fix that worked for me, thank you! :)

@CristinaSolana

Copy link
Copy Markdown
Author

Glad you all are finding this helpful. :)

@zcmgyu

zcmgyu commented Oct 13, 2020

Copy link
Copy Markdown

Update Oct 13, 2020:

git pull upstream main

@swathi-vennela

Copy link
Copy Markdown

fatal: Couldn't find remote ref master

after running
git pull upstream master

@mikemartino

Copy link
Copy Markdown

Thank you.

@jasontwuk

Copy link
Copy Markdown

Thanks. This Helps me a lot. 🙂

@laoshaw

laoshaw commented Dec 10, 2020

Copy link
Copy Markdown

These comments all seem to depend on cloning the repo to your local computer and doing the fetch and merge there followed by a push. You can perform the sync to the upstream repo directly on github. Generate a pull request at the upstream repo (there is a link "compare forks") specifying your fork as the base and the upstream branch you want to merge as the head. Generate the pull request and if all goes well, you can accept your PR and you do not have to fetch both to your local site. The merge is done directly on github.

Thanks. Saved my day.

@nakul-shahdadpuri

Copy link
Copy Markdown

Thanks, helped a lot.

@Praful932

Copy link
Copy Markdown

I built a web based solution to sync the fork with the original using only GitHub APIs. It's all web, you don't need to do anything on the client
https://forkrefresh.herokuapp.com
As a plus it tells you the status off all your repos as compared to sources of the forks.

This helps! Thank you

@sami2020pro

Copy link
Copy Markdown

Thank you ❤️

@vivian-duong

Copy link
Copy Markdown

git pull is a git fetch and git merge in one step.
So the git fetch in step 2 is redundant if you're going to do a git pull anyway.

I second this. git fetch and then git pull won't break anything, but it's redundant.

@maryamrmz

Copy link
Copy Markdown

You can update it to:

git pull upstream main

@rebase-upstream

Copy link
Copy Markdown

This post should have been the first Google result. Would have saved me some time.

@emrecoban

Copy link
Copy Markdown

You can update it to:

git pull upstream main

thank you @maryamrmz it worked for me!

@mwaeckerlin

Copy link
Copy Markdown

How to keep a full project in sync, all the branches from the server and automated (no local checkout)?

I just want a slave mirror.

@mathieucarbou

mathieucarbou commented Apr 29, 2021

Copy link
Copy Markdown

Found an automatic and flexible solution using Github Actions that can be easily applied quickly to any fork.
See my blog post: https://blog.mathieu.photography/post/649318432483033088/automatic-fork-syncing-with-github
Or Gist: https://gist.github.com/mathieucarbou/96ab30024f0d3fb44cac970219d23efc

@liosc

liosc commented Mar 19, 2022

Copy link
Copy Markdown

Hi everyone.
I tried the commands suggested in this post. I was able to add the remote but when I try to pull for updating local I get the error "The unauthenticated git protocol on port 9418 is no longer supported.". I solved it using http// instead of git// when adding the upstream.

@uzluisf

uzluisf commented Apr 7, 2024

Copy link
Copy Markdown

I find it funny that years after years I keep coming back to this gist.

@jef

jef commented Apr 8, 2024

Copy link
Copy Markdown

I find it funny that years after years I keep coming back to this gist.

Based on this awesome gist, I made a little bash function for myself and use it on a few machines so I don't have to remember 😅

@pa-0

pa-0 commented Jun 2, 2024

Copy link
Copy Markdown

Just FYI, here's a method for anyone who wants to sync their GitHub forks with upstream without having to create a local clone:

The official GitHub CLI now supports syncing forks remotely with this simple command... (From GitHub's official docs:) "To update the remote fork from its parent, use the gh repo sync -b BRANCH-NAME subcommand and supply your fork and branch name as arguments.

gh repo sync owner/cli-fork -b BRANCH-NAME

If the changes from the upstream repository cause conflict then the GitHub CLI can't sync. You can set the --force flag to overwrite the destination branch."

Note

It is also possible to simplify the command by only supplying your fork (in the username/repo name syntax), like so:

gh repo sync OWNER/REPO

GitHub CLI will attempt to match your default/main/master branch with that of the parent and sync the two -- assuming there are no merge conflicts. Otherwise, it will notify of such.

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