Replacing master in git

Damien Cosset on June 13, 2020

Master/slave denomination The master/slave denomination is a common one in technology. Master/slave is an oppressive metaphor referring ... [Read Full]
markdown guide

"Master/slave is an oppressive metaphor".

There are so many problems with that statement that what I initially wrote as a quick response has turned into a longer post. Read it at 8 problems with replacing "master" in Git.

This comment is only kept for historical purposes.

First off...

1. There's no "slave" in Git.

Maybe RAID disk arrays would have this problem, but not git. So there's no "master/slave" metaphor in Git to speak of.

2. Words change meanings over time

"Master" is a term used the recording industry, or to talk about skill ("Master of Science", "Kung Fu Master" etc.). I'm not a native English speaker so "master" was strange to me too, but in American English "master" has been far more commonly used in the past 50 years to talk about vinyl records and CDs and degrees and expertise, than slavery. As someone else said,

These terms have existed for decades and now suddenly we feel they're racially loaded? I think this is a knee jerk reaction to a problem that doesn't exist.

3. Nothing is oppressive by itself

People choose meanings. Epictetus famously said this of insults (and "master" is far from an insult, but to illustrate the point):

“Remember, it is not enough to be insulted to be harmed, you must believe that you are being harmed. If someone succeeds in provoking you, realize that your mind is complicit in the provocation. It is not he who reviles you who insults you, but your opinion that these things are insulting."

4. Who does the word "master" really offend?

Has anyone ever complained of being oppressed when they saw a "master" branch in a Git repo? From what I've seen so far, black developers haven't felt offended by this word.

Blacks don't give a damn

5. What are the downsides of this rename?

When making a decision of this scale, that invalidates 15 years of scripts and CI processes and Git tutorials using the word "master", it would help to see its ROI. If nobody is actually choosing to be offended by this word, then all we're doing is wasting time changing a perfectly working process just to virtue-signal that we're "woke", while annoying far more people in the process and wasting their time when "master" won't work and "principal" will break things. Do consider that the vast majority of developers have nothing to do with oppression, and have never intended to oppress anyone.

6. Is this purely a PR move?

But hey, by being outspoken against "master", brands benefit from stoking the fires of racial conflict to elevate themselves in the eyes of consumers. Sony, an organization using cobalt mined by literal black slaves, including children, is in favor of BLM. GitHub renaming a branch is a cheap PR stunt when they could do far more meaningful things, like not working with the ICE:

Github contact with the ICE

...or not banning Iranian developers, suggesting they use GitHub to develop nuclear weapons.

7. What shall we rename next?

Slaves were hanged from branches at some point, should the word "branch" be changed? How about the Lighthouse web speed auditing tool? Light is usually white... How about the Invictus poem? Let's ban it!

I am the master of my fate:
I am the captain of my soul

8. Is this humiliating to black developers?

Last, and worst, by removing the word "master" blindly, we're uncritically reproducing a narrative that diminishes black agency in favor of a white-centric explanation. We're making the assumption that a black developer can't take the word "master" as simply a label and nothing more. Don't you think black developers may find that assumption humiliating?


I totally agree with your points, I think these kind of changes are only making things worse than they were before, I never heard anyone who ever complained about this term.

I am a developer and I am black(not speaking for anyone else of color) yet I have never felt offended by a word I see in a software that I use or don't use, I think there are far much better things we can do as a community if we agree to live with our different cultures.


Well I'm not changing! Master stays! Period!


It's like one of those parodies where white people make a remark about something "black", realize that they said this in the presence of a black person in the background, and feel compelled to assure them by clarifying that they weren't actually talking about black people, when that thought never crossed the person's mind. It's ironically the very kind of racist behavior that OP and GitHub claim to oppose.

Sloan, the sloth mascot Comment marked as low quality/non-constructive by the community View code of conduct

I really expected this to be a joke. But horrifiedly it seems to be real to some people. This mass hysteria is very strange to me. People really are that stupid.
Lets destroy all history and never learn anything from the past. Yeah
Anyone ever checked the skin color of someone doing a pull request before looking at the code?
It's cray.


Nicely done! I've been using "unstable" for a while now, just due to my sheer love of Redis (this is their main branch name) - - - AND the fact that I have a healthy skepticism about whether any given commit I make will actually work 😉

Pulling in fewer cultural connotations is bonus! ✌️


This is confusing since to me "master" = "release" branch and the unstable branch is "develop". Of course I have about 20 repos and like 18 of them have no develop branch. So changing "master" to "unstable" and having no releases is more accurate for me! Using unstable would be a warning to everyone.


I think I'm going to name mine 'disturbed' and let THAT be a warning to everyone. 🤣


Yeah I think Redis specifically likes to just discourage people treating their default branch as the source of truth. So I think that can be helpful in some legitimate measure. I've worked on teams where it's like, "master is sacred". Also valid, just depends on the local attitude


Haha, I've never heard of the unstable branch before, but that's a nice touch. If my imposter syndrome is kicking in that day, I'm not sure I would have enough courage to push to an unstable branch 😆


Nice to know I'm not the only one affected by imposter syndrome. haha!

No no no. I belong precisely because I ship errors 😉 mistakes are fun and universal 🌌


Is it implying that the HEAD of the default branch is the unstable release and Tagged versions are stable releases?

Yeah, and they also hang onto release branches in addition to the tags


"Words matter. The words we use to define concepts have a lot of importance"

Yep, they do. Context also matters. Pretending you don't know a word doesn't make whatever connotations may apply to said word (out of context) magically disappear. Should we also stop using the word "integrated" in IDE, since it's also a reminder if you take it entirely out of context? How about "dark" color schemes and "race" conditions? On other "trigger" words, as mentioned in other comments, are you also going to insist on renaming FAT (file allocation table)? How about "smart TVs", since the name must surely be offensive to those who got a low SAT score, or even "SAT" for paraplegics who find its association with "stood" offensive? How about the handiman's footstool? Stool means poop in the same lack-of-context you're applying to Git's branches. Poop is gross so we shouldn't call a tool a piece of poop. For that matter, we're all using tools here, and "tool" is sometimes used as an insult, so we obviously need a new word for the things we're using every day to do our jobs.

The rabbit-hole of stereotypical SJW bullshit always goes deeper. Language has context, and that matters.


Super great post. I think this hits on all of it, and yeah the bitkeeper history is there, but also the existence of master/slave terminology in software in general sort of helps imply that even if git stopped explicitly saying “slave”.

Software needs to be flexible and evolve. It’s kind of the whole point.


Exactly, our goal should be to change norms to make people feel more welcomed and to have a more inclusive environment. This is the least we can do.
In terms of low-hanging fruit, I think it doesn't get any easier.

Might not be much, might not do a whole lot, it's certainly not the last thing we should do, but it's so easy and effortless that it should be a no-brainer.


I have never heard "slave" in discussions about source control ever; especially git. At least not until we decided we needed to change it.

I always thought of master as "law and gospel" in terms of this is the source of truth for the repository. Where the word originates or how it was used in what git was "built from" is not relevant, language changes over time.

The problem with lots of the suggestions, "unstable", "production", etc. They are all specific use cases for specific workflows. Master is not specific to anything but clearly states what the branch is for. Branching strategies in source control is an entire religion by itself.

I do think that "principle" as suggested in the OP is better... or "main", "root", "default"... but I still feel it is unnecessary to move away from a master branch. I won't enumerate all of the practical problems with moving away from master as many others already did a great job at that.


On a deep thinking, there is indeed another way.

Stop using English for everything. (and stop being anglio-centric.) English is mostly widely-used by people who, in the past, tried colonialism and tried to find "helpers" around the world, anyway.


What alternative do you propose? What language would be widely understood and has never been used by an oppressive culture?


Please, let's not get ridiculous. There's no feasible alternative to English. I've been writing about this since 2008. English unites us, regardless of native tongue, ethnicity, skin color etc.

It's a terrible argument to say

"English was used 200 years ago for something bad, therefore we should stop using English"

By the same logic, we should stop using computers because computers were used to perpetrate billion-dollar hacks.

Spot on. You could even expand further on it.
Don't forget that IBM provided the logistic systems that were used to run Hitler's concentration camps.
Swiped a Master-card recently when shopping? How about Visa, thinking about borders here...or American Express, which could be argued makes references to the US railroad system, built in part by slave labor. Where should we stop?


I think French and Esperanto have tried at some point, but failed.

The only alternative I think is possible is, Simple English. That is, English with limited words. However, there would still be things like black, white, and main.

It is hard to be politically correct and please everyone.

You suggest French as an alternative to English, as if they’ve been somehow less colonial and oppressive throughout the ages?

Simple English isn’t a language. We’re programmers; our very work involves a lot of specialized terminology that wouldn’t come close to meeting the requirements of a “simple” English.

(And what’s wrong with “main”?)


OK, I've never thought about this before. You just blew my mind...

One of the things we never discuss is the language we use...

Wow. As a French speaker, I can't believe I never questioned once that... Thank you ❤️


English is the most spoken language in the world, and the 3rd in the number of native speakers. Computers, and most modern technology is derived from inventions created by English speakers, mostly native ones. That is not going to change any time soon.


I assumed he was just being funny with such a ridiculous suggestion.

I don't think he got the memo, lol.


World class troll. Thanks for this 🤣


That wasn't my intention, but it did indeed go further than I thought.


I assume you're joking in which case: Classic! I love it.

Let's take this to its logical extreme where people who never owned a slave in their life are not able to use the only language they know how to speak: English, because some of their distant ancestors owned slaves. What about black people whose distant ancestors were actually slaves but only know how to speak English? Should they also stop using English?

The concept reaches ridiculously humorous outcomes in mere milliseconds so I think it's worth further exploration.

Maybe we should use French, Dutch, Portugese or Spanish... dang! They were all colonizers also...

A crazy thing I heard of recently is that in the 1600s the English enslaved hundreds of thousands of Irish (white) people also - sending them to the Carribean. They were actually worth only about 1/5th the value of an African slave for some reason - maybe they blistered up with sunburn and were in constant pain in the hot, sunny climate that they their skin had not evolved to deal with.

It was enlightening to realize that some white people were also slaves to other white people.

Ah, it's a strange, mixed up world we live in...


Not using English for everything is going to be impossible. English is the language of business and like it or not connects the world. That doesn't mean that other languages are not important, valid, for viable; but it will be next to impossible to shift the entire world to a different language.


Ok, if you want it, then do it. No harm.
But you have to see that all the projects are being written and given support in english because from the languages that are spoken by the majority, is the easiest of them (Spanish and Chinese are not as easy as english).
Yes, we could use Esperanto, but not everyone knows it.
Think as a developer: how many of your libraries/frameworks you'll have to replace and refactor if the Original Developer decides to write the whole resource in their native language... And also, how many will stop being available because of this?
But as I said in the beginnning: you may do it to your own code, but you'll have serious issues when trying to look for some support.
Or, as Jason Tibbetts stated: what solution do you propose? This is causing more troubles, rather than giving a solution.


If we visualize Git as a flow of branches from a single point in history, then names like default and main are more accurate. I would even use origin, but it's usually reserved for Git remotes when forking repositories. For myself, a branch called master would tell that branch has total control over other branches which is not the case with Git.

The push back in this issue is very typical human behaviour visible in many discussions in our society. When someone declares that eating red meat is bad for you, there usually is at least one stating how they will grow their meat consumption just to arouse reaction and potentially ease their insecurity.

Let's strive for a more inclusive future in tech and make software that is painless to evolve as time goes by.


When I was first learning git I found master to be wholly unhelpful in helping me grasp the concepts.

I also feel like when I was getting familiar with continuous integration I again would have gripped things better if explicit and purposeful main and secondary branch naming were a thing instead of the master terminology.


Why not just call it default? After all is the default branch.


In our organization, develop is the default branch. I like the suggestion above of using production or release.


As others pointed out "master" is not always "production" or "release". In our work flow it is not. That feels like the main practical issue. We can't all agree on a branching strategy and everyone deploys differently. Code has to move differently. Any name that has to do with "production" is out for us -- it doesn't work.

As others pointed out "master" is not always "production" or "release". In our work flow it is not.

That's an argument in favor of "production" being the name of the default branch, because then it forces you to be mindful about setting up your workflow and using the intended process from the get-go (even if that setup ultimately becomes automated). Something rather generic and non-descriptive like "master" allows for people to fall into bad habits during the beginning of a new project, even when the process dictates otherwise.

Any name that has to do with "production" is out for us -- it doesn't work.

What's your workflow look like?

No it isn't. It assume you want to release from the default branch. We don't and I am sure there are many others that do not either. There is no single workflow that is correct for everyone. I am very much against anything in a tool that forces a workflow. As soon as you do that you will find people needing to work against that workflow. It creates unnecessary friction. Master makes far more sense as the default branch name. It is the "master" copy from which all other copies are made. Think recording master for film -- less of a thing since we are basically all digital now but that isn't the point.

As far as what we do... We have branches for each environment; Dev, Beta, Demo, and Release (Production). Each environment has its own web, file, and database servers. A typical change workflow goes like this (feel free to substitute merge and pull request as you like -- they are effectively the same in terms of the end result).

A feature branch is made from master -> development work done -> feature is merged to beta for testing -> merged to demo for external UAT

From here once QA and UAT are done we have a group that reviews items pending release. We sometimes have conflicting timing needs or things that are interdependent. We have a lot of different things going on so not everything that finishes UAT is released just because it has passed. The code makes its way into into master when it is approved for release. Once approved the feature is merged into master, call it a release candidate if you want.

From there a merge is done from master to release. Builds are connected with each environment branch to deploy as needed. Our releases happen once a week at the same time. We need to maintain a link to what is in production in case we need to hot fix. It is rare but it does happen.

Could we do it differently? Probably. Are there better ways? Probably. Is this way wrong? I don't believe so. We have had a very good success rate with it. We aren't containerized. We have heavy environments. It is just the way it is. So we are managing what we have that gives us speed of process with some security / safety.

I would LOVE to be in a fully CD/CI pipeline. We just aren't there yet. I don't think I would change much about the process other than automating a lot of the steps though. I would still want unique branches by environment. It just makes things clean, clear, and easy. What is in production? Look at the release branch. It'll tell you.

I don't care that much if the name is changed (although to me there are far more issues than folks are willing to openly discuss with renaming the default branch). Trunk is better as it has a similar meaning. But git hates svn... I am very much against anything that would imply a workflow.

No it isn't. It assume you want to release from the default branch.

Okay, it seems my attempt to describe what I'm talking about more succinctly failed.

Let me retry with the full text that I posted elsewhere:

In my opinion, naming the default branch "prod" (or some variation) is actually a fantastic idea almost regardless of workflow. Here's why:

In every workflow, there's a branch, somewhere, that pushes to production. Whether that's the default or not and what exactly it's named isn't particularly relevant in the context of git (branches can always be changed). It's still the one that gets pushed to the production server or pulled by the pipeline to build the production result in some fashion. This makes it explicitly clear that this branch is the production one.

Naming the default branch "prod" sets up that expectation and discourages directly changing the code on that branch from the get-go (something I know I'm guilty of). In other words, it forces us to be mindful of what we're doing, even early in the project, where habits are most likely to be formed and ingrained, but workflows and processes are most likely to be super loose. We start with the habits we want in the long run, instead of allowing bad habits and then having to unlearn them later.

In workflows where the default branch isn't supposed to be "prod," it forces that split immediately (again, avoiding the fast-and-loose tendency that can happen early in a project), by forcing a new branch to be created to become the new default branch.

The beauty, too, is that most of this can be automated with aliases if you want the automation. Then you get the git scaffolding your project needs from the beginning, and you've still gone through the process of making thoughtful decisions about it (or, you made the deliberate effort to not be thoughtful and mindful about how you set up your git repository).

Master makes far more sense as the default branch name. It is the "master" copy from which all other copies are made.

You rail against assuming workflow and yet you're doing exactly that here. I've worked with several workflows where master very much isn't the "master copy from which all other copies are made." In fact, I've used workflows where "master" was not branched from at all after the initial workflow setup. (My static sites use "master" for their generated output. That branch doesn't even have history, because the pipeline nukes it with each update.)

But here's the thing: no matter what the default branch is named, git doesn't assume workflow. The default branch only exists because it needs a branch to work with. Git itself doesn't even follow your "master branch is master copy" paradigm except in the loosest of senses (because it needs a branch to start with), because it doesn't care what branch you branch from (or merge into). It's only when you get into the broader ecosystem tools like Github that you really start seeing this paradigm, at which point, it's fully configurable.


Default works for me 😁


As far as I know, the issue is not with the word master but with the word slave. I'm not sure why you see git's master as the kind of master/slave relationship.

To me, git's master is more of a master/copy:



Git's master is historically tied to master/slave. It got the name from BitKeeper.

Source here


Not quite. That was an interpretation, based on quite a lot of inference ('probably'). On the other hand, the guy who actually came up with the term says he meant it as in 'master copy': twitter.com/xpasky/status/12722807...

FWIW he also suggests that the BitKeeper history might also be valid.

Given the fact that I don't remember why I called a thing that thing 6 months later, wouldn't surprise me if that were the case. It's also possible that both were the case: master, the word, came from BitKeeper, and he also learned that it meant something else.

Yes, you are right. I later learned that the git team were thinking and using 'master/slave' terminology for repos around that time.


Fair enough. If you look at bitkeeper's documentation though, it refers to master as the master repository. In git, all repos are equally important, it is hard to see when we normally use a server (eg. github) as the source of truth. But in reality all repos are their own master. If anything git freed all the slaves, hehe.

I hear your point. But the master/slave denomination is still quite common is technology. Even if it is rarer these days. The history is there and even if the meaning has changed or time has passed or whatever, if there is a slight chance that this will be interpreted as master/slave ( like it is today ), it should go away.

UPDATE my comment grew into a proper post, 8 problems with replacing "master" in Git.

The comment below is only kept for historical purposes. PS: congrats to the OP for taking more time to think about this issue and keeping their post for accountability.

Why exactly should it go away? Because one sensitive soul out there doesn't have a bit of self-control and chooses an interpretation you have no control over?

Did you mean to oppress anyone when you simply used a word that had become standard?

Words have multiple meanings. "Drug" can get you in jail, or save your life. Should you never use "drug" again because a cop might interpret "I need a drug for pain" as you seeking fentanyl, not aspirin?

There's always going to be someone offended or triggered by anything. Choosing an interpretation of a word with multiple meanings is just that, a choice.

To me, "master" comes from the records industry, where you had a master record/CD and made copies. I don't see why I should mess up all my git workflow and scripts for the purely theoretical slavery interpretation of the word by nobody who will ever use my private repo, and why all git tutorials and articles should become invalid because "master" is now demonized.

Has anyone ever actually complained about this word for git branches?


But who knew that that was the origin? I remember the days of The appallingly-named master & slave device controllers, but had no idea that the same terminology was originally in git.


The problem here is those originals are not meant to be changed; a new version can be made but it never really replaces the master. And there should only ever be 1 master copy. thus implies this branch should never be touched. But that is rarely the use case for the primary branch.

I like main for the primary branch's name; it doesn't imply anything more than "this is the primary source to use".


You can create new masters out of old masters. Which is exactly what git does. Same for other types. You grab all the masters from recording a movie and produce a master for the actual movie. You edit it for the dvd version and you get the master for the dvd version...

The fact that it gets updated doesn't make it let of a master. Deployments get copied from there and can't (shouldn't) modify the code. And it is at any given time the source of truth for your project.

Having said that, I don't really mind how we call it. I'm not against changing the name. It is just a convention. If it was for me, we can call it potato 😅

I'm aware that you can do that; my point is that the terminology doesn't imply that for a lot of people, myself included.

When I think of a "master" copy, I think of the original manuscripts for something like the Iliad. We're not meant to change that copy because it serves as the source of truth for the Iliad story. Once you change it you have a new copy with a new "master" version that doesn't replace the old (unless it's a verbatim copy). In git though, that new version becomes the master copy.

But I'm glad you are open to change though, I actually don't see the full association with master/slave either tbh. I just don't think the name made much sense to begin with, thus if it also makes some people uncomfortable then there isn't much of a reason to keep it. 🤷🏻‍♀️

I think the misconception comes from interpreting master as a single entity. The difference with the master for a book is that copies are meant to be the same book. If your book is a modified copy of the Iliad, it is a master for its own version of the Iliad. What your describe in git is not copying, is creating new Iliads. We add more stuff and create a new master for others to make copies of. Which is the most recent master.

The reason to keep master is cost mainly. Cost of changing all the tools, hours lost trying to figure out why some script doesn't work or why some tutorial doesn't make sense. EVERYTHING has a cost. Even keeping it has a cost, a different kind though. Is it worth it? I don't really know. This article is the first time I've encountered this concern, without digging a bit more I don't know if it is a shared concerned or just someone creating a problem from nothing... 🤷‍♂️

To reiterate, I'm not against the change. I just think it is good to understand NOTHING is free.


"production" also sounds clearer..

So you could have

development -> staging -> production

Sloan, the sloth mascot Comment marked as low quality/non-constructive by the community View code of conduct

Except master isn't always production. Not every project has a production.

It's really ironic a white, French man decided his was the voice to push for this.


You don't need to agree with him..

But I'm more fascinated by the vehemence with which some people find it necessary to refute him.

If you don't like it.. fine.. don't do it.

Sloan, the sloth mascot Comment marked as low quality/non-constructive by the community View code of conduct

It is important to refute him because it's ignorant and token and accomplishes nothing.


I applaud your positive intent behind this.

Oftentimes in tech we consider our industry as "advanced" and yet we haven't done enough to be inclusive. And yet our history has been far from perfect in this regard.


Thank you! It's a very small step and the absolute minimum I can do. Hopefully, these little steps start a conversation and we will all learn and get better ❤️


Tech has done more than any other industry to be inclusive. Kids in Africa or India have $100 laptops where they can learn anything that we've put up online. Countless open-source software has enabled anyone, anywhere in the world, with absolutely no regard for race or ethnicity or anything like that, to do word processing and browse the Internet without paying anything to Microsoft. Crypto can liberate us from banks and government oppression (to talk about true oppression). Etc.

By being distributed over a medium where no names or faces are necessary, software is as inclusive as possible.


Yet changing a branch name is so hard?

The change is simple, but the implications are non-trivial and will cause far more pain than we think it may prevent.

Then maybe just do it on new repos going forward? I doubt I will go back and rename every repo I have going back ten years but I'm thinking for new projects why not? No one should be forced to do this but it's not a bad idea.

And BTW, I am 56 and was recording music back in the day on analog "master" tapes so I get what you mean by master tape or master pressing for vinyl but I have no problem using main or trunk as a branch either...

 I'm thinking for new projects why not? 

Let's say a person is new to open source, he/she searches google for tutorials about how he/she can contribute to open-source projects. All the tutorials will have the master mentioned. This will be really confusing for them. If they are new to open-source and computer science In particular, This will surely be a pushback for them.

Actually I would say if this is confusing for them they may want to look for another career... This is about as trivial as things will get for a developer. I'm sure in their Google search they will see a few results that discuss the renaming of branches for this reason. :)

Let's say a person is new to open source, he/she searches google for tutorials about how he/she can contribute to open-source projects. All the tutorials will have the master mentioned. This will be really confusing for them.

Because nothing ever changes and we don't have any references to old and obsolete and failed-to-launch tech anywhere, amirite?

Do as you please, this isn't Facebook. Is a friendly community. Sarcasm on a touchy subject isn't going to get you anywhere. About 90% of your comments are immature as hell, so therefore I rest my case.


The Git Development Community is working to at least make the name of the main branch easily configurable, so in not so far future having "main" or "trunk" branch instead of current default of "master" from git-init / git-clone would be much easier.


Flexibility like this is critical for the health of software development in general. IMO this is a good stress test on software maintainability in general.


The Git Development Community is working to at least make the name of the main branch easily configurable

What's wrong with it now?

mkdir /tmp/git-init && cd $_
git init && git checkout -b main
git commit -m init --allow-empty
git branch -a
git log --oneline

As far as I remember, changing the default branch would be able to be done with command line parameter or a configuration variable

git init --default-branch=main


git config branch.default main
# ...
git init

Please tell me you're being facetious...

Why would I be? It's as easy as specifying the branch name in your checkout command to change what your default is.

Because you asked what was wrong with a 7-step init process, in response to someone mentioning that the git developers are working on making it a configuration option.

It's not a seven-step process, though, that was just a complete example for illustration. It's as simple as:

git init
git checkout -b main

Or, we can just do

git config --global init.defaultBranch main

once, and never have to worry about it again.

We also don't have to worry about alias syntax, which is terminal-type-dependent, and can include it in provisioning/dotfiles repos and it works regardless of the person's system. :)


I've been thinking about the name since this discussion recently started, and it occurred to me that there's another reason why master (as well as main, primary, trunk, etc.) aren't really appropriate for the default branch.

One of the main design intentions of Linus Torvalds while he was developing git is to be nothing like subversion. svn uses trunk, with the idea that everything else "branches" out from there. git is not like that. In fact, "branch" is a poor choice of words for git, because it implies that there is a trunk, however, in git, there is no trunk at all. There's nothing special about the default branch. It's just another branch. They just needed a name for the first branch. But they were thinking in terms they were used to, like in BitKeeper, or Subversion. So, they called it master, reasoning that it would be the primary branch. But, it's not the primary branch, it's just the first one.

And in hosted git repos, like GitHub, the "default" branch is simply whichever branch HEAD points to. That's what GitHub does when you change your default branch: it just points to whichever one you specify. And when you clone a repo from a remote source, unless you specify otherwise, your local HEAD will start whatever HEAD is on the remote.

People use git like that (with a tree-like branching pattern), though, so it works for most people. But not everyone uses git like that. There are plenty of projects that maintain multiple primary branches, mainly to keep development going on older versions.

So, with the idea that really every branch is just a branch, they should, ideally, be named according to their function. So, my suggestion is that the "default" branch would be prod, or production. That way, it's clear that this branch has production-ready code. If you follow the git flow style, this makes sense anyway. You do most of your work in develop and feature branches, and merge into prod when it's ready.


That way, it's clear that this branch has production-ready code

What if it's not code that I'm keeping in my repo? For example I kept my master principal thesis in git. At that time, still in school, I felt no connection to the word prod at all. I think the premise for this discussion is absurd, but if I had to pick a new word, it would have to be as generic as possible. I think main works well.


"As generic as possible" would probably be "default", because that's all it is. It's the default branch.

It might be for production code. It might be for in-development code. It might be for documentation. It might be for something completely different.

Folks using git should choose a name for their first branch that accurately reflects what the branch is being used for. That way it's not ambiguous.

And if you're using it just for yourself, and not using it for collaboration, so it doesn't matter what you call it, call it whatever you want. It doesn't affect anybody else. It only has to have meaning to you.


What if it's not code that I'm keeping in my repo?

While "production" may not be a 100% accurate word (and is why different people have different ideas for the default name), the concept is still the same -- that's the rendition that's going to ultimately go to the final audience (be it client computers or bookshelves).

Weirdly enough, all of this disagreement could be solved by making the default branch name a config option...


The FAT32 partition should be changed as it is triggering for those struggling with body issues.


Should we also stop talking about "THIN" clients because that might offend super models - and they have emotions too ... although you wouldn't think so judging by their emotionless facial expressions as they strut the catwalk :)

Maybe we should also ban the use of the word 'model' in software ... it can be taken out of context.


I remember when I first heard this terminology, I couldn't believe it was a thing in software!
I think renaming master to main makes the most sense, since that's how it is explained anyway.


"Master" is a term from the recording industry. I'm not a native English speaker so it was strange to me too, but in American English "master" has been far more commonly used in the past 50 years to talk about vinyl records and CDs, or having a "Masters of Science" or being a "master of the guitar" than slaves. Words change meaning over time.


but in American English "master" has been far more commonly used in the past 50 years to talk about vinyl records and CDs...

Not in the computer industry.

Until the past decade or so, the "master/slave" terminology was alive and well and even the default meaning of "master" in this context, even if "slave" wasn't explicitly mentioned.

It was even engraved on hard drives until the early 2000s (until the early-mid 2000s, BIOS software would commonly look for bootloaders on any and all drives hooked up, unless jumpers on the physical drives were set to "master" and "slaves" -- or more accurately, the OS drive and data drives).

You can find the discussions had by several of the database organizations and adjacent groups about renaming the hub-and-spoke architecture from "master/slave" to something else.

Words change meaning over time.

They do, but in this case it's not a change of meaning. "Master" still means "overseer of subordinates" as one of its definitions.

The meaning, in this case, hasn't changed. The word is overloaded -- it has several definitions, not unlike overloaded methods in C# or Java (which is why the "Master of Science" thing is an absurd and bad-faith argument, because it's using a different definition of the word).

This overloading is actually an argument in favor of changing it, because there are many words to choose from that better describe the default branch and aren't overloaded -- both of which make the meaning more clear.


You've done absolutely nothing wrong in bringing this up, so please don't apologize. Thank you for trying to advocate for positive change. It's everyone's responsibility, regardless of color, gender, or nationality.

Some of the negative responses you got on this thread are absolutely beneath the standard of conduct for DEV.

Please keep speaking up for diversity and inclusion! Next time you get attacked like this, don't hesitate to click the three little dots (...) and both Hide Comment and Report Abuse. You have the right to keep conversations on your articles healthy and inclusive...and that means you have the right to be intolerant of intolerance.


Thank you for writing this tutorial.


Does 'master' always imply a corresponding 'slave' and hence always have slavery connotations?

At school, with no people of African origin at the school, in each year we had a teacher who was referred to as "the year master" but nobody ever thought that it related to any slavery concept. We just thought of him as the dude that was in charge, of us, and we were definitely not his slaves.

In git I've seen 'master' branch used universally but never once heard of other branches being called or ever referred to as 'slave' branches by anyone, ever.

Too bad if anyone has ever conceived a "Masterplan".

It must hurt to be "MasterCard" right now... VISA just scored a free home run!

The only IT concept I have heard of where master/slave is used is hardware redundancy - e.g. database replication where there is a 'master' database with one or more 'slave' databases to which data is replicated.

I can see a definite issue with that usage. Perhaps that concept should be renamed 'origin/clone' - which is actually a much more accurate description in any case. A 'clone' database's sole purpose is to become a perfect clone of the origin database - which is actually not at all like a master/slave relationship. So even people who are not offended by the use of the master/slave term should be disturbed by it's inaccurate depiction of the concept the term is trying to identify.


No. The word "master" does not always correspond to "slave". I have a Master's degree. That does not mean that I've made a slave of a subject. A master of a recording does not imply that there are slave recordings, but copies. MasterCard does not mean that it is for slave owners. Master plan just means it's either the main plan or a darn good one.

English is a strange language. One word can have many different meanings, and very different words can be spelt in the same say (e.g. to "lead" a group" or a "lead" pipe"). Let's not go overboard with a shotgun approach to censoring different words that happen to look and sound the same. The master/slave usage in tech is and has always been toxic and offensive. Let's just stop calling Jenkins worker nodes slaves. A git master branch does not have the same connotation.


First of all: I'm not disagreeing. I do believe that words have power and influence the way people think. I am not presenting an argument in the form of a question: I'm actually asking a question in an attempt to understand.

What is an oppressive metaphor?

It's people who oppress, not words, so it can't be a metaphor that oppresses. Maybe it's a metaphor that refers to a system of oppression. However, that can be said of a term like "landlord" as well, which does not seem to be a problem for most people. The main difference seems to be how long ago that system was in effect and how long it's been given time to take on a different meaning (of course, by not using the term because of its oppressiveness, we're not giving it any (more) time to take on a different meaning). Are these things that matter in determining whether or not a term is oppressive?

Maybe it has to do with whether or not people are bothered by a term. I mean, it makes a lot of sense to me to avoid using a term that bothers people. But for every term you will probably be able to find someone who is bothered by it, so you'll have to make it something like "a lot of people" are bothered by the term. But from what I've gathered, people seem to care more about the connection with slavery than whether or not a lot of people are bothered by this term.

Once again, I'm not saying that we shouldn't move away from terms like "master/slave". I'm not even saying that it's not an oppressive metaphor. I'm actually interested in your view as to what makes an oppressive metaphor or term.


I think that changing a word does not make any difference, actions make difference I live in a dictartorship and for over 5 years I used to work under conditions you could consider enslaving earning under 5$ per month for 13 hours of work while I was learning how to code and got my first job with a cheap laptop. I believe that if we can take actions to help people who live under real circumstances of slavery, we could make a difference, not changing the name of our branches for god sake


I commend you .. must have been awful..


Thanks, Yeah it was awful, but I'm grateful that it ended I'm still recovering physically after a year


It's not an either-or thing.

People can "take actions to help people who live under real circumstances of slavery" and change their branch names to something less inflammatory and more descriptive.


The dense bullshit I read here on dev.to on a daily basis is overwhelming. We might as well ban chess, because it commonly comes with black and white figurines. Ok, so we exchange it with red and yellow... What? These are also culturally connected to some skin color tones? dang.. lets take triangles and circles but in all blue and hope that nobody is offended. What? That might offend obese people because they connect their shape with the shape of the figurines? And they don't want to have king and queen because that is transphobe? This is getting tricky. We might be able to ship a set of "kings and queens" and people can choose what gender or if any any of their playing inventory has.

Ugh. I hate to get myself in an argument like this one, but seriously I have no clue where to draw the line. People should stop taking themselves so seriously. Life is short, have fun.


Oh how lovely..dev.to automatically adds a heart to my own posts, so I don't feel so lonely.. We raise a world where we only have "winners", "loved by everyone". The self implied facade we keep up to not crush our little helpless egos is mind-boggling.


So go to a different platform if it bothers you so much.

Which one?
medium.com is abusing its authors free time and energy to make money out of them.
echojs.com is okayish. They try hard to not get flooded with ads.
hashnode.com and dev.to is full of political and SJW articles. Sprinkled in with array method articles and beginner articles.
And then there are author platforms that
hackernoon.com has decent content, but I can also more or less compare them to medium, when it comes to the money making machinery.

I'm best off looking for individual blog posters hosting their own website, because platforms are never going to be the solution. I am happy if bloggers are advertising their own products on their own website - as long as they do it decently.

Or just follow the individual people that you prefer to read. No one says you have to read every single thing posted on a given platform.

That said, LiveJournal and its ilk are still going strong. Wordpress.com has a lively community. The Mastadon network is probably bound to have something (and most people don't limit themselves to a single post for things, and if nothing else, it's a fantastic place for discovery). And, like you noted, a great many people have their own websites and aren't even on these platforms.

The point still stands, though -- no one's forcing you to stay here. If you don't like the content (or, as the case is with Medium -- which I agree -- the business practices), then "vote with your feet" and find somewhere that better fits what you're looking for.

Or hell, start your own platform for yourself and those whose values align with yours. Then you can set the rule, get the content you want, provide a service for your niche, and depending on how you go about it could even have it pay for itself or pay you (if you want).


This is totally politics.

I believe, many of these people voting to replace 'master' from git use credit cards. And somehow they are quite ok to use MasterCard.

And that is something, that they use every day, and something, that other people see them use


Yet another person not "getting" it. It's not ever single word with master in it. It's the history of the connotation of master in Tech like hard drive and controller master/slave wording. Even though it looks like this is not the case in the original Git naming why not use something else? Simple change...


Do we have slave branches in git?
It is just the only word, same as in mastercard, master's degree, master-whatever-else.

So did you even read my last reply? Anyway, name your branches whatever you want. I'm not sure why people are pushing back on this so hard. It's not that difficult to understand.

Sure I did.
Let me put it in other words: there is no slave in git, 'master' in git not originating from an offensive "master/slave wording". It is just a single word same as in master's degree, mastercard, etc.
Something originating from 'master copy'.

Github competitor, Gitlab, was first to enrol into this renaming stuff. They've decided to change white-list and black-list terms. Well, ok, this could sound offensive.
Github had to act too.

I'm pushing on this, cause I see just politics here. this change will not improve anyone's life. There are other better things to worry about.

Reading this post I got really curious to find more about if the word master in git had relation with the master/slave terminology in tech. If you go to github.com/git/git, clone it and run git log -p --grep=slave, you'll see it does.

So yes, there is slave in git and it comes from master/slave wording. ¯_(ツ)_/¯

Ok, you rename that poor master branch
But what you gonna do with this?

I'll do nothing at all. I just argued against your paragraph where you strongly said that the term's origin wasn't related to something, but it is, without providing sources. Which words people choose to have in their repositories/codebase is something that might reflect on their careers not mine. So, ask them.


As per this creator's comment:
It's as "master copy" so it's a "solution" to a non-existing problem.

Also let me join this comment from a person that is targeted by this change.


It's a shame that everyone ignored this.
This is yet another case of a bunch of white people putting themselves in front of a PoC cause and making it about them. They fail to see the absurdity inherent in telling PoC people what should offend them. They just jump in front with a megaphone and seize control. Their default behavior is so built around consuming they don't even realize when they're doing it. Then when someone speaks up, they eat their own.

Where are the black voices in the conversation? They're being ignored and drowned out by the white voices driving the discussion with a low effort display of "solidarity" while the rest of us are out in the streets protesting daily for real, meaningful change.

If you're not black, your place is BESIDE or BEHIND this cause. You lack the fundamental experience to lead the cause.


Thanks for finding and posting that! It's an excellent point and I've reused it in my response. The OP doesn't offer any evidence of any black Git user actually being offended by the word "master". The problem may be completely imagined, but the pain caused by changing the word will be very real.


You linked to Petr Baudis explaining that he named it after "master recording", but you conveniently ignored the post earlier in the thread where he, himself, said that he is glad that it's being changed: twitter.com/xpasky/status/12714774...

I also have some doubt that he, all by himself, chose that name. Yes, he was part of the git core team at the time and made several commits to the code. But the particular commit that made "master" the default name for the first branch was made by Linus himself. And he probably had other reasons for choosing "master", regardless of what Petr was thinking.


... And, as Linus himself is a Finnish guy, with English being not his first language, and himself being not from the American-raised culture, I'm pretty sure he wouldn't create this name to promote slave culture

He might not have been aware at the time. That's totally reasonable. It's also possible that he was aware, and didn't care, because Linus is kind of a jerk.

He might be kind of a jerk (he is, to be honest, although he's better now), but there is a difference between being a jerk and being a racist piece of shit. Also, racism is not that much proponent in Europe nowadays, and not a thing people have their minds on in general.

(disclaimer: personally I don't feel a connection between word master and slavery. for the first 16 years of my life master was an HDD you put at the end of your IDE cable.)

Absolutely. To be clear, I was not trying to suggest that Linus is a racist. I was suggesting that he might be insensitive to those who are impacted by racism, but not that he himself is racist.

And again, I don't know if that's the case. I'm not trying to accuse him of anything in particular. It's completely possible that, if he chose the word, he chose it for no reason other than it was a familiar word to him, and it seemed reasonable, and he wasn't particularly concerned about it.

According to Petr Baudis, Petr himself chose the name. It's possible he made the suggestion to Linus, and Linus didn't care enough about what it was called and went along with Petr.

I'm not sure we'll ever know exactly how the name was chosen. It was 15 years ago. All the people involved in the development may not all remember exactly what happened perfectly.

But, in this discussion, it probably doesn't matter why it was chosen. More than that, what matters is what it means to people today.


Thank you for making the only legitimate comment to this ridiculous topic.


As English is not my native language, the usual main branch name has no other connotation to me, I don't even know what bitkeeper is, and I never found out someone having a problem with that, so I'll continue to use the standard "master" wording unless the repo owner uses whatever official denomination works better for it.


Seriously, I know you seem to see this as "blowing up". But it does so for a reason. We all need to take a deep breath and get back to reality. If we start on this path of picking words which would not offend someone, we would really not have that many words to pick from. "Principal" can be just as offending to someone as "master". Git was not written during the time of slavery, so it's context to "master" and "slave" in a slavery context is just moot.

This is just a silly storm in a water glass.

Seriously guys, get a grip. (Oh sorry! I might have offended the women in the audience by saying that.)


I think everyone agrees that changing might be the a right move (for other reasons). But none of the proof provided anywhere suggest the origins are truly proven, as far as I am concerned. Maybe the person that first committed that had a different notion altogether. Personally when it comes to other usages (databases) the references are clear. Here they are not, what the proof provides is that certain people are tempted to use it with the wrong context.


@damcosset just curious. Do you vouch for replacing the terms master record in music, master's degree in academia and the saying "easy to learn, hard to master" in gaming? Or is this limited to master branch?


And what are we doing with orphan branches? I feel bad for somebody growing up without parents.

Furthermore, let's rename the default remote ("origin") to "mirror". I don't want to be categorized by "origin".

Let's just do that right!


Worst is to have a detached HEAD, many people died by guillotine...


SJW has never been used to refer to people who actually care, and I get the impression you don't really care either given you've latched onto the term "SJW" instead of the actual issue.


I honestly feel that it should be more than just moving away from slavery references, but also because these naming changes makes it more approachable or easier to understand for beginners and non-native English speakers as well.

I'm not a native English speaker in any way, and I find main or trunk easier to understand than master. It might be different for other people though, but I think that's just because they're accustomed to a certain word.

There's also another thing that can be done, let's say that thanks to all the complicated scripts, it makes it impossible for someone to move away from using master as a default branch name. I think that what they could do to alleviate this is by referring master to something else, we should push for that instead of flaming others 🙂


The "main" is often the principal pipe used to collect sewage, so this could be very appropriate for a lot of repos.


And that's the exact connotation of "master" in git branches. It is the main branch from which, and into which all other branches flow. It has nothing to do with master/slave.


Definition of master (Merriam Webster) 2a: one having authority over another : RULER, GOVERNOR

Definition of principal (Entry 2 of 2) (Merriam Webster again) 1: a person who has controlling authority or is in a leading position

...you've shown us how to replace the word "master" with a word that means "master".

Only "master" has more than one meaning. In this case, it's this one
5a: a master mechanism (see MECHANISM sense 1) or device
b: an original from which copies can be made
especially : a master recording (such as a magnetic tape)

Contextually using "principal" has less specific meaning than "master", since "master" in this context has nothing to do with slavery. I am willing to switch from using "master" because it's unimportant to me and it seems to matter to others, but the new word needs to be relevant and I don't want to change it again in 3 months because the new word is just as bad.


Probably not clear what I just wrote... I wish we could settle on a better word NOW but I prefer letting things find their own collective way. In a year no one will remember using master.

I used to be a build release engineer and part of my jobs was releasing the "golden masters". We used to have these round, flat things to hold data most of you are too young to know about...


Does anyone genuinely think removing "master", "whitelist", "blacklist" is going to make the world a happier place, rather than just making substantial numbers of people think it's just a load of nonsense? Is getting rid of master/slave in software engineering going to resolve the problems of modern slavery, and wipe away any historic wrongs that were done to some people over millenia?


Does a random white developer from the UK really have any sway on the conversation on what makes a difference for black Americans? or a french white man making a post about renaming "master" in git?

They're bad analogies and can be seen as racially offensive. I think they're token gestures, however, to be renaming everything again (there was a wave of this a few years ago). GitHub still serves its ICE contract despite losing employees over it. MSFT and others still serve the US police agencies. Until things like that change, everything's still the same.


It's not just about Americans though, is it? USA isn't the only country that had slavery. As I said elsewhere, slavery has a history going back over thousands of years, including substantial periods of same-race enslavement. There remain substantial areas of the world where people are enslaving others of the same race, including Europe where "modern slavery" is rife, so treating such an analogy, taken out of context, as racially offensive is a hijack of its historical meaning.

Do you also believe we need to rename male and female connectors? Not use the term "mate" in relation to joining parts together, since these can be taken as gender offensive?

Where does all this end?

As for GitHub and ICE, that's a separate issue.

USA is the only country that replaced slavery with racial segregation and Jim Crow laws, Cu Clux Clan (or however those fuckheads were named), gerrymandering as a strategy to devaluate their votes (when they actually got rights to vote) and a lot of other shit.

Yes, this issue IS just about Americans. You're being ignorant by thinking this is about generic slavery; look up "chattel slavery" and realize how much worse it was than any other form before it. The GitHub contract is not a separate issue. It is racism against South Americans who have been demonized by the president™ as "invaders" and other such language

"Yes, this issue IS just about Americans."

Excuse me if I do come off as a little pushy, I merely want to offer a counterpoint to arguments I think I see flaws in. This one looks like the book definition of American exceptionalism - that issues there are inherently unique and of higher importance, and that global consciousness should prioritize fixing those. Not only is this untrue, you are marginalizing the histories and current issues of other nations. American race relations do not carry over to other countries. If git aims to be a global technology, then it makes no sense to implement changes based on the offense taken by a segment of population living in a culture space that is roughly 0.5% of github's userbase, country-wise.

"realize how much worse it was than any other form before it."

This is a very futile line of argumentation - oppression olympics, ie who had it worse. Do victims of deportation living in concentration camps score higher or lower in the slavery category? Why would it even matter?


"Does a random white developer from the UK really have any sway on the conversation on what makes a difference for black Americans?"

Why are you concentrating on black Americans? Slavery has far deeper and wider history. Have you considered the serfdom in ex-Soviet countries? Why not?

It seems to me, whoever makes the most noise and acts most offended gets the power to force conventions on everyone. Not cool. As a skeptic, critical thinker and enthusiast of making decisions based on science, statistical and historic data, the reasoning present here offends me. But I do not expect any sympathy simply for taking offense. In fact it's irrelevant to the topic if I take offense, is it not? Maybe you can see where I'm going with this.

Because I'm an American and the protests started in the US about racism against black Americans. This isn't "generic slavery protesting"

We seem to get to the core of the issue. Changing "master" and other "problematic" words is a kneejerk reaction to the outrage of the day. It will solve absolutely nothing of importance, certainly not racism or police brutality - which AFAIK was actually what the whole catalyst incident was. And I, for one, think we should as a community think more globally.

If it's a race issue, then the ones in the US do not carry over to other countries.
If it's a slavery issue, you have more on your hands to sort out than black slavery.
If it's police brutality issue, I have no idea how it even relates to this thread.

Changing "master" and other "problematic" words is a kneejerk reaction to the outrage of the day. It will solve absolutely nothing of importance, certainly not racism or police brutality - which AFAIK was actually what the whole catalyst incident was. And I, for one, think we should as a community think more globally.

I agree. I don't feel this change has any real effect.


Said PR department is exemplifying the worst stereotypical SJW. Again, words mean things. PR and SJW are not mutually exclusive terms.


Thank you for this tutorial! I don't think something like this is going to stamp out racism in tech per se, but it's a thoughtful change and there's nothing wrong with accommodating perspectives of folks most of us don't come into contact with that regularly.


This is silly. Up next: Rip Masters of the Universe and ban chess as well while at it xD
Heck, I'm making a turn based strategy game that's meant to be a modern alternative to chess and it doesn't uses the white/black paradigm anymore, but loosely the colors of the rainbow :D


Not enough for me. I think we will be fully pleased if all citizens of a country which once in its history had slaves, donates 90% of its salary to people like me, that live in a country that was enslaved a couple of times in history. Do that for like 50 years and then we will forgive you.


There is absolutely nothing wrong with bringing this up and leading by example, speaking up about an issue and making the change to make our communities more inclusive. Certainly we can't speak for how all black people feel about this term, but this isn't what you're doing. As allies our responsibility is to educate our own community and it just so happens to be white men and the faction of those who are resistant to change and thinking from other people's perspectives came to dogpile. And sadly this is just one fraction of what outspoken black folks experience. But this is difficult work... and fights have to be picked. There are people who are genuinely interested to discuss and introspect why such a change matters or bothers them. And there's those who are so outraged at any suggestion of change, or just need to be right and pester nonstop.

You're not responsible for how they've reacted. And how you've responded has been generous, human and accomodating. I would also use this energy in your workplace in moments you see that are awry, if someone makes an oddly insensitive joke or is excluded from speaking or meetings, is ridiculed for not knowing something. This is great energy and we need to use it where it matters. Do not apologize and keep pushing!

In the comments I see a range of fragile pushback from centering oneself ("well this never existed in my culture so why should I have to change"), appeal to authority (the authority of black people who only share their point of view, or authority of the creator's non-racist intent), all-or-nothing equivalences ("how about we ban every word with "master" in it too?), trivializing the matter ("this is more political-correctness")... the list goes on. We can feel out when it is useful to engage and when not, because some of these people aren't actually here to talk. You don't owe them an apology at all.


I for one look forward to the day when every university stops awarding Master's Degrees. And what kind of messages are we teaching our children when people are still getting Master Plumber or Electrician licenses!

Oh and those jerks in Hollywood also should stop announcing "well we are releasing Star Wars again, ReMASTERed." (Speaking of Star Wars, they'd better re-dub all of them to get rid of all that "one master, one apprentice" nonsense.)


Saw the title and I thought: "Oh, cool ! Some kind of new git flow I don't know."

Well nope.

I will not write a long argument on this question.

But I'm curious, what should we do with the etymology of the word "robot" ?


I always thought "master" should be called "production".


I absolutely agree with this, except in cases of repos where they don't use the default branch for production code.

There's plenty of repos that have a release or prod branch, and use master as their development branch.

Really, we should just call these branches what they are, and avoid ambiguous naming altogether.


I think you're forgetting to remove master from origin after you've pushed principal; you'll want to do a git push origin :master.


Truth about linguistics in medicine -- we are waging wars against (bacterial) colonies.


Why in the first reason did they call it master instead of main or default?


I'd like to add my point of view, not in contrast to yours, but to further the debate.

First of all, I'm personally in favour of changing all software denominations such as "master/slave" and "blacklist/whitelist" to literally anything else that doesn't imply millions of people suffering.

I have a different opinion when we talk about Git though.

The word "master" by itself has a general meaning of "person (or, by extension, thing) with particular authority, knowledge or skills". This is paraphrasing Merriam-Webster.

A "master" can be a university degree, the original artifact from which copies are made, a master of kung-fu, a master of pottery, or an owner of slaves.

But this means that the specific connotation of "owner of slaves" is only there if the word "slave" is used in conjunction with the word "master" (or if used when talking of slavery).

In the case of Git, non-master branches are never referred to as "slaves". The concept in Git is entirely different. Yes, maybe the original inspiration came 16 years ago from BitKeeper using the master/slave terminology. Maybe it was just laziness. Maybe... we don't actually know. My feeling is that "master" was chosen to signify something different, as Git works with a different model (from my understanding). Additionally, even the link you provided isn't all that sure of its reconstruction (italic by me):

Why is that branch called master? Probably because BitKeeper uses
"master" for its main branch [...]

I've never in my life heard or read anything that used the master/slave metaphor to explain git.

My personal opinion is that it's too long of a stretch. I will not be changing the name of my Git branches for the time being (may change my mind in the future), but I will also avoid using the master/slave and black/white terminology in other fields or technologies where the reference to slavery is more explicit.

Just to be absolutely clear: I also don't see anything wrong in choosing to not name the main branch "master".

PS: In Italian, "hello" and "goodbye" are both translated to "ciao". "Ciao" has an interesting origin:

From Wikipedia:

The word derives from the Venetian phrase s-ciào vostro or s-ciào su literally meaning "I am your slave". This greeting is analogous to the medieval Latin Servus which is still used colloquially in parts of Central/Eastern Europe or the antiquated English valediction "Your Obedient Servant." The expression was not a literal statement of fact, but rather a perfunctory promise of good will among friends (along the lines of "at your service" in English). The Venetian word for "slave", s-ciào [ˈstʃao] or s-ciàvo, derives from Medieval Latin sclavus, deriving from the ethnic "Slavic", since most of the slaves came from the Balkans.


I'm having a really difficult time understanding this line of reasoning. We, AT BEST, have a term that maybe originated from an oppressive term. And yet, we choose to keep it because: Well it's too much of a stretch, I'd rather keep it.

We, as developers, love to boast about naming, and how important it is. How is master an appropriate name to define this branch in git? Of all the definition of master I'm seeing, I don't see one that explains the naming of master. And I'll go ahead and say that it's too far of a stretch to justify it.

The truth is that this word implies the master/slave relationship. Maybe not for you, but the harm is real. Master/slave is still a used concept in technology. That's an oppressive term. By keeping master for no other reason than our little convenience, we expose people to this oppressive term, even when it is not explicit.

When harm can be done, we take the safest route and protect the most vulnerable.


I don't debate that master/slave is an oppressive term, but, honest question:

What do we do about "Master of Science"? What do we do about "master record"? What do we do about "master/apprentice"?

Where did I say I wanted to abolish the word master altogether?

You said:

The truth is that this word implies the master/slave relationship.

I thought you meant the word master altogether, sorry if I misunderstood.

I should have been clearer indeed, that's my bad. That can happen when 2 people exchange in their non-native language 😄

I did mean master in the context of the git branch.

If it doesn't apply to "Master of Science" or other studies, why does it apply in the context of git? Where do we draw the line in this conversation?

Don't get me wrong, by all means, change it. The debate we are having is important to have I think.
I just don't really share the opinion, because I see technology as a non-political/-racial entity. IMHO politics should be kept out of technology as much as possible, but that is just me.

If I have to change hundreds of build-jobs, repo references and environments in all my clients projects, due to a political debate, that's where I actually draw the line and seriously have to ask for the ROI of this proposition.

Technology is not neutral, nor is it apolitical, but that's another debate.

The problem I have with master in the context of git is because it most likely comes from the terminology master/slave ( see the sources ). And technology as a whole has a history of using the oppressive master/slave in our domain.

At the end of the day, you do what you got to do, but building a more inclusive environment means we have to do the work. That's a small step, and a very easy one. Other steps are more uncomfortable and require more work 😉

I don't care about the other contexts of the words because I have not researched them. If their use is inappropriate, I will educate myself and stop using them.

Technology is not neutral, nor is it apolitical, but that's another debate.

Why is it not? A thing is just that, a thing. It has no opinion on anything. Why should we apply politics to a technology that is not political?

The problem I have with master in the context of git is because it most likely comes from the terminology master/slave ( see the sources ).

I'm sorry, but "most likely" is not definitely. I can find no word from Linus Torvalds about this. At this point, it is only speculation. I personally would speculate, it is the master branch, because it is the deployable branch and thereby holds authority over every other branch. That is the sole attribute a master has. Authority. Thereby the word master in context of git is apolitical and a sound choice.

But as I said, speculation, since there is no definite explanation by the developer of git.

At the end of the day, you do what you got to do, but building a more inclusive environment means we have to do the work. That's a small step, and a very easy one. Other steps are more uncomfortable and require more work 😉

Yet again I disagree. For a small project, yes, it's a small step and if people are more comfortable with it, go ahead, be my guest.
Now think about about something bigger. The git foundation joins in, replaces master with, I don't know, mainline maybe, and rolls that out in an update.
Hundreds of thousands of build-jobs and developer machines. Nuked into oblivion.

That is not a small step. That is something that can horribly go wrong and bomb whole companies if done wrong.

That is what I am getting at.
Political changes are never a small step. They always have implications and most of the time, pretty massive ones.

I don't care about the other contexts of the words because I have not researched them.

You should, because context matters in language.