Frequently Asked Question

What are 'origin' and 'upstream', and what's the difference between a fork and a clone?

A clone is a complete copy of a repository, made locally with git clone <url>. The URL you cloned from is automatically saved as a remote named origin, which is simply Git's default name for "where this came from". origin has no magical properties; it is just a convention so that git push and git pull have a sensible default. You can rename it (git remote rename) or have several remotes.

A fork is a GitHub/GitLab/Codeberg concept, not a Git concept: it is a server-side copy of someone else's repository under your account, which you then clone locally. In the standard open-source contributor workflow you fork the upstream project, clone your fork (which becomes origin), and add the original repository as a second remote called upstream. You push your branches to origin, open pull requests to merge them back into upstream, and periodically git fetch upstream and merge or rebase to keep your fork's main up to date. The convention origin = my copy, upstream = the project I am contributing to is followed nearly universally.

Further reading and video