Założenia:

  • korzystam z Git w linii poleceń

Lepiej zapobiegać, niż leczyć

git config --global init.defaultBranch main

I już. Wszystkie nowe repo będą startowały z główną gałęzią main.

Pod warunkiem, że korzystamy z git > 2.28. Czyli Debian 10 jeszcze nie ale Debian 11 już tak.

Trzeba na serwerze zmienić zawartość pliku HEAD ręcznie, jak to jest opisane niżej.

Przemianowanie głównej gałęzi

Zmiana nazwy gałęzi i wysłanie jej na serwer:

git branch -m master main
git push -u origin HEAD

Skasowanie teraz mastera nie jest możliwe, bo na niego pokazuje HEAD. W Githubie i podobnych serwisach daje się kliknąć, że teraz główną gałęzią ma być main. Mając własny serwer, trzeba zmienić wskazanie HEAD:

git symbolic-ref HEAD refs/heads/main

Teraz da się usunąć mastera, bo HEAD już na niego nie pokazuje:

git push origin --delete master

Może się zdarzyć, że pojawi się zepsuta referencja refs/remotes/origin/HEAD, o czym zobaczymy komunikat wywołując:

git branch -a

Na liście zabraknie remotes/origin/HEAD -> origin/main a wtedy trzeba to naprawić:

git remote set-head origin main

Chyba taki sam efekt jak powyższa komenda daje również to:

git symbolic-ref refs/remotes/origin/HEAD refs/remotes/origin/main

Po powyższym kroku lista branchy powinna pokazywać, że HEAD kieruje na origin/main

Może się okazać, że gałąź w upstream nie pasuje do gałęzi lokalnej, co widać oglądając listę gałęzi. Trzeba je wtedy rozpiąć i spiąć poprawnie:

git branch --unset-upstream
git push --set-upstream origin main