Updating Forked Repositories on GitHub

18th June 2015

Sculpin

People may or may not know, but this site runs on Sculpin, a PHP based static site generator (this may be the first time that I've mentioned it on this site). The source code is hosted on GitHub, and I've listed the site on the Community page on the Sculpin website.

To get it there, I forked the main sculpin.io repository so that I had my own copy, created a branch, made my additions and submitted a pull request. Easy enough!

New Domain

In the last week or so, I've changed this site URL from .co.uk to just .uk, and also updated the GitHub repo URL to match, so I wanted to update the Community page to use the correct URL.

There had been commits to the main repo since my pull request was merged, I didn't want to delete my repo and fork again, and making any changes against and old codebase isn't best practice, so I wanted to merge the latest changes into my forked repo before I did anything else - just to check that I didn't break anything!

Updating my Local Repo

I had a quick look for a Update my fork button or something, but couldn't see one to I added the main repository as an additional remote called upstream and fetched the changes.

$ git remote add upstream https://github.com/sculpin/sculpin.io.git

$ git fetch upstream
remote: Counting objects: 33, done.
remote: Total 33 (delta 6), reused 6 (delta 6), pack-reused 27
Unpacking objects: 100% (33/33), done.
From https://github.com/sculpin/sculpin.io
* [new branch]      master     -> upstream/master
* [new branch]      pr/4       -> upstream/pr/4

Now my local site knows about the upstream repo, and I could rebase the changes (git pull upstream master should have worked too) and push them back to origin.

$ git rebase upstream/master
First, rewinding head to replay your work on top of it...
...
Fast-forwarded master to upstream/master.

$ git push origin master

This seems to have worked OK - the commits are still authored by the correct people and at the correct date and time - and I went ahead and created a new feature branch and pull request based on that master branch.

The commits on my master branch after rebasing
The commits on my forked master branch after rebasing and pushing. All good!
The new feature branch with my additional commit.
The new feature branch with the new commit.

Is There a Better Way?

Did I miss something? Is there a recommended and/or better way to update your forked repos, maybe through the UI? Please send me a tweet with any comments.

Update: Rebasing in PhpStorm

December 2015: I’ve found that PhpStorm has an option available to rebase a fork from within the IDE. This is within the VCS > Git menu.

I believe that it will use an existing "upstream" remote if it exists, otherwise it will add one automatically for you, linking to the repository that you forked from.

Once you’ve completed the rebase, you can then push your updated branch either from the terminal, or using the Push command from the same menu.

Rebasing a forked repository in PhpStorm using the VCS menu.

It would be great to see something similar added to hub too (I’ve created an issue)!

Resources

Questions? Comments? I’m @opdavies on Twitter.

About the Author

Picture of Oliver

Oliver Davies is a Web Developer, System Administrator and Drupal specialist based in the UK. He is a Senior Developer at Microserve and also provides freelance consultancy services for Drupal, Symfony and Laravel applications and Linux servers.

Availability

  • Currently no spare part-time capacity.
  • Currently no spare full-time capacity.