I recently forked a project and applied several fixes. I then created a pull request which was then accepted.
A few days later another change was made by another contributor. So my fork doesn't contain that change.
How can I get that change into my fork? Do I need to delete and re-create my fork when I have further changes to contribute? Or is there an update button?
I update my forked repos with this one line:
Use this if you dont want to add another remote endpoint to your project, as other solutions posted here.
Actually, it is possible to create a branch in your fork from any commit of the upstream in the browser:
https://github.com/<repo>/commits/<hash>
, where repo is your fork, and hash is full hash of commit which you can find in the upstream web interface. For example, I can open https://github.com/max630/linux/commits/0aa0313f9d576affd7747cc3f179feb097d28990, which points tolinux
master
as time of writing.You can then fetch that branch to your local clone, and you won't have to push all that data back to GitHub when you push edits on top of that commit. Or use the web interface to change something in that branch.
How it works (it is a guess, I don't know how exactly GitHub does it): forks share object storage and use namespaces to separate users' references. So you can access all commits through your fork, even if they did not exist by the time of forking.
Since November 2013 there has been an unofficial feature request open with GitHub to ask them to add a very simple and intuitive method to keep a local fork in sync with upstream:
https://github.com/isaacs/github/issues/121
Note: Since the feature request is unofficial it is also advisable to contact
support@github.com
to add your support for a feature like this to be implemented. The unofficial feature request above could be used as evidence of the amount of interest in this being implemented.Foreword: Your fork is the "origin" and the repository you forked from is the "upstream".
Let's assume that you cloned already your fork to your computer with a command like this:
If that is given then you need to continue in this order:
Add the "upstream" to your cloned repository ("origin"):
Fetch the commits (and branches) from the "upstream":
Switch to the "master" branch of your fork ("origin"):
Stash the changes of your "master" branch:
Merge the changes from the "master" branch of the "upstream" into your the "master" branch of your "origin":
Resolve merge conflicts if any and commit your merge
Push the changes to your fork
Get back your stashed changes (if any)
You're done! Congratulations!
GitHub also provides instructions for this topic: Syncing a fork