Working with upstream repos
Keeping your downstream repo up-to-date
A downstream repository (aka a “fork”) maintainer commonly needs to stay current with upstream work (aka “original”). The case is development continues on the upstream
repo while you work on your own origin
fork. You want to fetch
the upstream changes and apply them to your origin
so you don’t make conflicts.
The following steps allow you to achieve this on the command line in a local git repository.
Add the Remote Upstream Repository
This step defines the upstream repository of your fork. First is the syntax followed by an example.
git remote add <any_name_you_choose> [Upstream git URL]
git remote add upstream https://github.com/QubesOS/qubes-doc.git
Fetch the Upstream Branches
git fetch <the_name_you_chose_earlier>
git fetch upstream
Merge Upstream Changes into your Downstream Repository
From your master branch, use the following merge command to merge the upstream master branch changes into your local source:
git checkout origin/master
git merge upstream/master
You then can either merge into the branch you were previously working on or start a new branch. Since starting a new branch is easy, this sample is merging the master
branch into the develop
branch.
git checkout origin/develop
git merge origin/master
Workflow Example
- You fork from the
upstream
repo usingclone
and then create a local copy on your computer. - You create a new branch
branch-1
off of themaster
branch to do your work on. - You
push
those commits frombranch-1
to your ownorigin
repo. - You then create a pull request with the
upstream
repo into themaster
branch. - Your pull request is
merged
into themaster
branch and development continues on theupstream
master
branch past your local andorigin
repo. - You then have to
fetch
theupstream
repo before you continue your work to avoid conflicts - You then
push
theupstream
changes to yourorigin
repo keepingorigin
up-to-date withupstream
.
Legend
Access | Upstream | Origin | Local |
---|---|---|---|
Own | No | Yes | Yes |
Read | Yes | Yes | Yes |
Write | No | Yes | Yes |
Remote | Yes | Yes | No |