What is the difference between origin and upstream on GitHub?
git, git-branch, github
Solution
This should be understood in the context of GitHub forks (where you fork a GitHub repo on GitHub before cloning that fork locally).
- `upstream` generally refers to the original repo that you have forked (see also "Definition of “`downstream`” and “`upstream`”" for more on `upstream` term)
- `origin` is your fork: your own repo on GitHub, clone of the original repo of GitHub
From the GitHub page:
When a repo is cloned, it has a default remote called `origin` that points to your fork on GitHub, not the original repo it was forked from. To keep track of the original repo, you need to add another remote named `upstream`
git remote add upstream https://github.com/<aUser>/<aRepo.git>
(with `aUser/aRepo` the reference for the original creator and repository, that you have forked)
Note: since Sept. 2021, the unauthenticated git protocol (`git://...`) on port 9418 is no longer supported on GitHub.
You will use `upstream` to fetch from the original repo (in order to keep your local copy in sync with the project you want to contribute to).
git fetch upstream
(`git fetch` alone would fetch from `origin` by default, which is not what is needed here)
You will use `origin` to pull and push since you can contribute to your own repository.
git pull
git push
(again, without parameters, 'origin' is used by default)
You will contribute back to the `upstream` repo by making a pull request.
Problem
What is the difference between `origin` and `upstream` on GitHub? When a `git branch -a` command is executed, some branches it displays have a prefix of `origin` (`remotes/origin/..`) while others have a prefix of `upstream` (`remotes/upstream/..`).