GitHubとHerokuのデフォルトブランチをmasterからmainに変更してみた

公開:2020/10/05
更新:2020/10/06
3 min読了の目安(約3000字TECH技術記事

GitHubで新しくリポジトリを作ると、デフォルトのブランチ名が「master」から「main」に変わったとのこと。そろそろ対応しようかね、というわけで。

ちなみに今回対象のリポジトリは、リモートリポジトリにGitHubを利用、CI/CDにGitHub Actionsを利用し、実際のプロダクトとしての動作環境にはHerokuを利用している。CDとして自動デプロイ対象となるのはステージング環境(これもHeroku上で動作)だけで、プロダクション環境へのデプロイは手動で行っている。

ローカルと、GitHubでやること

  1. ローカルで git checkout master してmasterに移動
    • git switch master でもOK
  2. ローカルで git checkout -b main してmainブランチを作成
    • もちろん git switch -c main でもOK。なかなかswitchコマンドに慣れない…
  3. ローカルで git push -u origin main してmainブランチをGitHub側にpush
  4. GitHub上でデフォルトブランチをmasterからmainに変更
  5. ローカルで git branch -d master してmasterを削除
  6. ローカルで git push origin :master してGitHub上のmasterを削除

GitHub ActionsやCircleCIなどで、特定のブランチのみ(masterのみとか)で動くような仕組みを使っている場合は、そのブランチ名も変更することを忘れずに。

git branch -m master main でブランチの名前を変えてもいいかも。その場合、リモートの追跡ブランチ(upstream)がmasterのままになると思うので、変更しないといけない。

また、デフォルトブランチに対していろいろな制限(rule)を設定している場合、この機会に見直してみるのがよいかも。いつの間にか設定できることが増えていたりするよ。

参考

Herokuでやること

Heroku側で既にmainブランチをデプロイ用に使えるようになっているので、やることはたった一つ。

  1. ローカルから git push heroku main で一度デプロイするだけ

今回の場合、GitHub Actionsを用いたCDに以下のようなstepのコマンドを用いていたため、自動でのデプロイ初回は失敗(origin/mainが存在しないので)。一度手動でデプロイを行った後、rerunして正常に動作することを確認した。

- name: Deploy to Heroku (staging)
  env:
    HEROKU_API_TOKEN: ${{ secrets.HEROKU_API_TOKEN }}
    HEROKU_APP_NAME: ${{ secrets.HEROKU_STAGING_APP_NAME }}
  if: github.ref == 'refs/heads/main' && job.status == 'success'
  run: git push https://heroku:$HEROKU_API_TOKEN@git.heroku.com/$HEROKU_APP_NAME.git origin/main:main

Herokuのmasterを消すには

masterを消してリポジトリをきれいにしたい場合は、herokuコマンドのHeroku Repo pluginを使うと、簡単にきれいにできる。

  1. heroku plugins:install heroku-repo でプラグインインストール
  2. heroku repo:reset -a appname で対象アプリケーションのリポジトリをリセット
  3. git push heroku main で対象アプリケーションのリポジトリにmainをpush

手順としては以上の通り。間違って他のものをリセットしてしまわないように、コマンドを確認しつつ前進。

参考

おまけ

リポジトリ作成時のデフォルトブランチをmainに変えるには、以下のコマンドで。

git config --global init.defaultBranch main

ただし、Git 2.28からの機能なので、必要に応じてアップデートを。