Feb 11, 2020 · Updated: Jul 05, 2021 · by Tim Kamanin
Picture this: you have a fork (origin) of a GitHub repo (upstream). You submitted a PR from origin to upstream and then, upstream contributor says something like this:
"Hey, we've introduced some changes to master, could you please rebase your pull request to the latest master branch?"
Calm down, turns out that's pretty simple! Follow me, I'll show.
Ok, let's say the upstream repo URL is https://github.com/django/django.git
(yes, yes, you're contributing to Django, great job!)
And your fork repo URL is https://github.com/timonweb/django-fork.git
Now, in order to pull the latest changes from upstream to origin you need to:
1) Add the upstream remote like this:
git remote add upstream https://github.com/django/django.git
2) Download master
branch from upstream:
git fetch upstream master
3) Overwrite your master with upstream's master via git rebase
:
git rebase upstream/master
4) Push to master, please note --force
here:
git push origin master --force
Yes, it's git merge
! There's a lot of debate on git rebase
vs git merge
. I won't go into much details here, but merge
is kinda safer and creates an additional commit that contains merged commits, whereas rebase
is good for git log purists since it doesn't create a commit upstream is merged. Rebase is a good choice when no one except you has worked on your feature branch.
I always try to go with the simplest and safest choice, this I prefer merge
to rebase
, thus if you're like me and want to do the same thing, then merging from upstream would be as simple as:
1) Add the upstream remote like this:
git remote add upstream https://github.com/django/django.git
2) Fetch and merge upstream master
into your current branch:
git pull upstream master
3) Push changes back to origin:
git push origin master
And you're done!
Hey, if you've found this useful, please share the post to help other folks find it: