GITデフォルトブランチのmainへの移行

Date: 2021/01/27 (initial publish), 2022/05/27 (last update)

Source: jp/note-00028.md

Previous Post Top Next Post

TOC

21世紀の世情の反映で、 PC の視点から、デフォールトのブランチ名は、masterに代わり、新規のプロジェクトでは mainが使われていきます。

人を不愉快にすることを続けたく無いので、折に触れ過去のプロジェクトでも同様にするべく、 masterからmainへのデフォールトブランチ名を移行するための手順を、備忘録を兼ねたメモ としてここに作成します。

GITHUBサーバーの変更

GithubのWeb interfaceで、Settings -> Branches -> Default branch から 「master」を「main」と変更します。

ローカルのrepoの変更

ローカルブランチ名の変更

次に、GITHUBのWEBインターフェースの吹き出しにある指示手順で、ローカルの repoのブランチ名を状態を確認しながら変更します。

$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
$ git branch -m master main
$ git branch -a
* main
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
$ git status -sb
## main...origin/master

トラッキングの移行

さらに、GITHUBのWEBインターフェースの吹き出しにある指示手順で リモートのトラッキングがうまくするための追加の関連設定を 状態を確認しながらします。

$ git fetch origin
From github.com:<user_name>/<project_name>
 * [new branch]      main       -> origin/main
$ git branch -a
* main
  remotes/origin/HEAD -> origin/master
  remotes/origin/main
  remotes/origin/master
$ git status -sb
## main...origin/master
$ git branch -u origin/main main
Branch 'main' set up to track remote branch 'main' from 'origin'.
$ git branch -a
* main
  remotes/origin/HEAD -> origin/master
  remotes/origin/main
  remotes/origin/master
$ git status -sb
## main...origin/main

HEADの整合性の確保

上記でGITHUBのWEBインターフェースの吹き出しにある指示手順は終了し新ブランチ名で使えます。

ただ、remotes/origin/masterが残っているのが目障りです。綺麗に新ブランチ名に移行するには、 これを消してHEADの整合性を確保します。

$ git symbolic-ref refs/remotes/origin/HEAD refs/remotes/origin/main
$ git branch -a
* main
  remotes/origin/HEAD -> origin/main
  remotes/origin/main
  remotes/origin/master
$ git branch -r -D origin/master
deleted remote-tracking branch origin/master (was ???????).
$ git branch -a
* main
  remotes/origin/HEAD -> origin/main
  remotes/origin/main

上記の最初の操作のHEADの関連付け先変更処理は、git remoteを使っても できます。この方が見通し良いかもしれません。

$ git remote set-head origin main
... (以下同様)

ここで行ったHEADの関連付け先変更処理は、以下のコマンド実行時のWARNINGの解消 をしてくれます。

$ git branch -a
warning: ignoring broken ref refs/remotes/origin/HEAD
...

綺麗に新ブランチ名に移行するのは結構大変です。

GITHUB 以外の場合

GITHUBのみならずGITLAB系も含めてWEBインターフェースがあるREPOのホストサーバーは 上記同様のWEBインターフェース経由でリモートのブランチ名を変更するアプローチが WEBインターフェースとの整合性がとれ無駄なデーターアップロードもなく良いと思います。

ただ、直接アクセスできないREPOのホストサーバー上のブランチ名を変更する場合は、 ローカルのブランチ名を変更してレポをPUSHした後で、REPOのホストサーバー上の古い ブランチ名masterを消すという荒技を使うのも手です。

$ git checkout -b main
$ git branch -D master
$ echo "renamed master to main"
$ git push origin :master

以下でも同じです。

$ git branch -m master main
$ echo "renamed master to main"
$ git push --delete origin master

ローカルのデフォールト設定

ホスト上で新規に作るREPOのブランチでフォルト名の設定は以下です。

$ git config --global init.defaultBranch main

参考Cookbookサイト

Previous Post Top Next Post