July 1st, 2019 - 3 min read
If you're not a collaborator of a repository the only way to contribute is by forking the repo and creating pull requests to merge changes back.
That's OK but here I'd like to mention some commands that are useful for working in this situation.
If you're new to Git, I'd recommend getting the basics before reading this as I think it's a more advanced post.
For learning Git the following pages may be interesting:
After forking the original repository and cloning it to your computer it's useful to have the remote upstream
available so you can update master
if it changed remotely.
Use the command
git remote add upstream git@github.com:<username>/<upstream-reponame>.git
to add the repository that is the base of your fork as upstream.
Next run git pull upstream master
to pull every remote change on master. If nothing changed you'll get the prompt Already up to date.
.
Sometimes you'd like to access a remote fork so you can have a look at a specific branch.
To enable this we have to add the fork by adding it as a remote by running the command git remote add fork-username git@github.com:<username
You can name the remote however you like but I'm usually prefixing it with fork-
but just the username would be also OK.
Now as we're having the new remote we can run git fetch fork-username
.
This will load all details from the remote so we can check out the branches. The branches will be listed during fetch.
So if you'd like to work on a branch from the remote you can create a new local branch by running git checkout -b local-branch fork-username/branch-name
.
After this, the checked-out branch local-branch
will track the remote branch fork-username/branch-name
. Updating the branch will work with git pull
but git push
may not work because that depends on the access right to the fork.
If you'd like to push the new branch to your fork you can call git push -u origin
. That will change tracking to origin and you can now create a PR from this remote branch to the branch of the fork.
If you're doing many PR reviews it can become cumbersome to add every fork to your local repo.
You can also check out the changes with the PR number with the following command
git fetch upstream pull/<PR-no>/head:<new-branch>
If you like you can add the following alias to your global git configuration:
git config --global alias.checkout-pr '!sh -c "git fetch upstream pull/$1/head:$2 && git checkout $2" -'
And with the command git checkout-pr
it's possible to create a new branch based on a PR number - e.g. git checkout-pr 1234 your-local-branch-name
(here 1234 is just an example)
I think I'm extending this post if I'm having other useful commands to list here. If you think I've missed a command please let me know in the comments below.