When a new Git repository is initialized using
git init, the default name of the main branch that is created is “master” (likely based on the terminology used in BitKeeper, which Git was created to replace).
For the past 20+ years, the usage of “master/slave” terminology has been criticized as needlessly reproducing racist terminology of slavery, and in the course of 2020, this discussion has finally broadly reached Git as well, with calls to rename the default branch to “main” or “trunk” instead (previously, this had been proposed for specific projects, e.g. GNOME in 2019).
Petr Baudis, who picked the names way back in 2005, weighed in to state that they wish they had picked “main” instead. Using “main” instead of “master” has the benefit that it autocompletes with “m” and “ma” as well, and is also the term GitHub (who still collaborate with ICE) are switching to.
Currently, the branch name a new repository is initialized with is hard-coded in Git, so there are two options to change the default (to “main”, in the following examples):
- Changing the HEAD pointer before the first commit, using the
git symbolic-ref HEAD refs/head/mainor manually overwriting the
echo 'refs: refs/head/main' >.git/HEAD;
- Putting this change into a git template, by copying the default git template:
cp -r /usr/share/git-core/templates ~/git/template, adding the ref pointer:
echo 'ref: refs/heads/main' >~/git/template/HEAD, and passing that directory to
git initin the
--template=option (or setting
If you want to easily change the main branch name of existing repositories, you can just run
git branch -m master main && git push -u origin main. Remember to adapt any settings or scripts that might refer to branches by name, such as CI/CD, “protected branches”, etc.!