Many open source projects are taking steps to update terminology to be more inclusive. The largest of these changes has been renaming the “trunk” branch of git repositories from master to main.
This is great and I fully support the transition, however this has resulted in some minor annoyances when working on various projects. I use git aliases to checkout out the trunk branch (gcm) and to also pull from upstream repositories (glum) as I generally work on forks. I’m now in a position where some projects still use master as their default branch, some use main, some repos like documentation or websites may use gh-pages, and some use other conventions all together.
To resolve this I’m updated my gcm and glum aliases to use a new gdb alias which queries the upstream repository for it’s default branch name. As my workflow uses forks 99% of the time I have defaulted the remote to upstream but if you use another workflow you may wish to change this to origin or something else.
function gdb () {
REMOTE=${1:-upstream}
git fetch $REMOTE
git remote show $REMOTE | grep "HEAD branch" | sed 's/.*: //'
}
unalias gcm
function gcm () {
git checkout $(gdb $1)
}
unalias glum
function glum () {
git pull upstream $(gdb upstream)
}
These functions replace my existing aliases provided by oh-my-zsh.
gcm
gcm checks out the default branch name from the upstream repository, but also takes an argument to pass in an alternative remote name.
$ gcm # Checks out the default branch name from the 'upstream' remote
$ gcm origin # Checks out the default branch name from the 'origin' remote
glum
glum pulls the default branch from the upstream remote. As the u in glum stands for upstream this one does not take an argument.
$ glum # Pull the default branch name from the upstream remote