I can choose any names for the remotes defined in my local repository. Regardless of preferences and opinions: What names should I choose, to work best with the tool defaults?
Using Git with a forking workflow for collaboration is a popular and useful model.
That workflow means I have:
[…] other developers should pull from the official repository to
synchronize their local repositories.
[the developer will] push the commit to their own public
repository — not the [central] one. Then, they file a pull request
with the [central] repository, which lets the project maintainer know
that an update is ready to be integrated.
The Git documentation is fundamentally confused on this matter. Its glossary definition of
The default upstream repository. Most projects have at least one upstream project which they track. By default
originis used for that purpose. New upstream updates will be fetched into remote-tracking branches named
So that definition – and the natural English-language conntations of the name “origin” – strongly implies that the
origin remote should be the central, authoritative, canonical upstream repository, where new updates are fetched from.
Yet the convention for the triangular workflow flies directly against that definition:
origin remote defines the push destination for local branches, which in this workflow is the public personal fork repository.
(There is no fetching of upstream changes from this remote, which contradicts the Git documentation's concept of
upstream remote defines the “default upstream repository” which the local repository tracks, and from which updates will be fetched.
(This is what the Git documentation defines as
origin but apparently that's not the convention.)
This convention is described in the Atlassian article on the “forking workflow”:
[…] the Forking Workflow requires two remotes—one for the official repository, and one for the developer’s personal server-side repository. While you can call these remotes anything you want, a common convention is to use
originas the remote for your forked repository […] and
upstreamfor the official repository.