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.

git clone [email protected]:neerajsingh0101/rails.git

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

origin [email protected]:neerajsingh0101/rails.git (fetch)
origin [email protected]:neerajsingh0101/rails.git (push)

Now I will add upstream remote by executing following command.

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

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

origin [email protected]:neerajsingh0101/rails.git (fetch)
origin [email protected]:neerajsingh0101/rails.git (push)
upstream git://github.com/rails/rails.git (fetch)
upstream 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.

git checkout -b exception-handling

In the Gemfile I will use this code like this

gem 'rails', github: 'neerajsingh0101/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.

git checkout master
git fetch upstream
git rebase upstream/master
git 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.

git checkout exception-handling
git rebase master
git 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.