How to keep your fork up-to-date

Neeraj Singh

Neeraj Singh

September 13, 2013

Let's say that I'm forking repo rails/rails. After the repo has been forked to my repository I will clone it on my local machine.

1git clone [email protected]:neerajdotname/rails.git

Now cd rails and execute git remote -v . This is what I see.

1origin [email protected]:neerajdotname/rails.git (fetch)
2origin [email protected]:neerajdotname/rails.git (push)

Now I will add upstream remote by executing following command.

1git remote add upstream [email protected]/rails/rails.git

After having done that when I execute git remote -v then I see

1origin [email protected]:neerajdotname/rails.git (fetch)
2origin [email protected]:neerajdotname/rails.git (push)
3upstream git://github.com/rails/rails.git (fetch)
4upstream git://github.com/rails/rails.git (push)

Now I want to make some changes to the code. After all this is why I forked the repo.

Let's say that I want to add exception handling to the forked code I have locally. Then I create a branch called exception-handling and make all your changes in this branch. The key here is to not to make any changes to master branch. I try to keep master of my forked repository in sync with the master of the original repository where I forked it.

So now let's create a branch and I will put in all my changes there.

1git checkout -b exception-handling

In the Gemfile I will use this code like this

1gem 'rails', github: 'neerajdotname/rails', branch: 'exception-handling'

A month has passed. In the meantime rails master has tons of changes. I want those changes in my exception-handling branch. In order to achieve that first I need to bring my local master up-to-date with rails master.

I need to switch to master branch and then I need to execute following commands.

1git checkout master
2git fetch upstream
3git rebase upstream/master
4git push

Now the master of forked repository is in-sync with the master of rails/rails. Now that master is up-to-date I need to pull in the changes in master in my exception-handling branch.

1git checkout exception-handling
2git rebase master
3git push -f

Now my branch exception-handling has my fix on top of rails master.

If this blog was helpful, check out our full blog archive.

Stay up to date with our blogs.

Subscribe to receive email notifications for new blog posts.