Git、GitHubそれぞれで、リポジトリ作成時のデフォルトブランチを設定する方法

昨年より、GitHubで作成されたリポジトリのデフォルトブランチは `main` になりました。
[The default branch for newly-created repositories is now main](https://github.blog/changelog/2020-10-01-the-default-branch-for-newly-created-repositories-is-now-main/)

また、Gitプロジェクトとしても初期ブランチ名をmaster以外に変更する検討が進められています。
[Regarding Git and Branch Naming](https://sfconservancy.org/news/2020/jun/23/gitbranchname/)

(上記リンクはこちら、 [github/renaming](https://github.com/github/renaming/)から飛ぶことができます。)

現状、Gitではmasterブランチがデフォルトブランチとして自動的に作成されますが、バージョン[2.28](https://github.blog/2020-07-27-highlights-from-git-2-28/)より、初期ブランチが指定できるようになりました。


# Gitでデフォルトのブランチを変更する

##環境
- Mac
- git version 2.30.0

##説明
gitのバージョンが[2.28](https://github.blog/2020-07-27-highlights-from-git-2-28/)以上である必要があります。
2.28で使えるようになった `init.defaultBranch` を使います。

新規リポジトリを作成する場合にデフォルトブランチを `main` にしたい場合は以下のコマンドを実行します。

```bash
$ git config --global init.defaultBranch main
```

この先gitコマンドで新しく作成するリポジトリのデフォルトブランチは `main` になります。既存のリポジトリのデフォルトブランチが変更されることはありません。

##実験

`init.defaultBranch`　に何も設定していない状態でリポジトリを作成すると、デフォルトブランチは `master` になります。

```bash
$ mkdir sample

$ cd sample

$ git init
hint: Using 'master' as the name for the initial branch. This default branch name
hint: is subject to change. To configure the initial branch name to use in all
hint: of your new repositories, which will suppress this warning, call:
hint: 
hint: 	git config --global init.defaultBranch <name>
hint: 
hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
hint: 'development'. The just-created branch can be renamed via this command:
hint: 
hint: 	git branch -m <name>
Initialized empty Git repository in /xxxx/sample/.git/

$ touch test.txt

$ git add .

$ git commit -m "first commit"
[master (root-commit) c05650c] first commit
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 test.txt

$ git branch
* master
```

`git init` を行うと、 `hint` としてデフォルトブランチの名前を変えられること、既存ブランチのrenameの方法も出力されていますね。
続いて、デフォルトブランチを `main` にしてみます。

```bash
git config --global init.defaultBranch main
```

この状態でリポジトリを作成してみます。

```bash
$ mkdir sample-main

$ cd sample-main

$ git init
Initialized empty Git repository in /xxxx/sample-main/.git/

$ touch test.txt

$ git add .

$ git commit -m "first commit"
[main (root-commit) 563d9a9] first commit
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 test.txt

$ git branch
* main
```

デフォルトブランチが `main` になりました。


# GitHubでデフォルトのブランチを変更する

##説明
GitHubでもデフォルトのブランチを変更することができます。 `main` から変更する理由はあまりないかなと思いますが、CIだったりなんらかの理由で `master` にしたいこともあるかもしれません。

###個人アカウント配下リポジトリ
以下のリンクにアクセスし、 `Repository default branch` を変更します。
https://github.com/settings/repositories
<img width="600" alt="Repository default branch" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45528/fc92e348-fc4c-ffa6-284b-fa59cd49dd70.png">


最初にアクセスすると `main` になっています。こちらを `master`　、もしくはデフォルトにしたいブランチを入力し Update ボタンを押すことで設定完了です。

###GitHub Enterprise、Organization配下リポジトリ
それぞれ以下のリンクにアクセスし、変更します。
https://github.com/organizations/YOUR-ORGANIZATION/settings/repository-defaults
https://github.com/enterprises/YOUR-ENTERPRISE/settings/member_privileges

##既存のリポジトリのデフォルトブランチをrenameする
GitHub上で、既存のリポジトリのデフォルトブランチを変更することができます。
GitHub上のリポジトリ > Settings　> Branches > Default branch を変更します。

こちらでGitHub上のデフォルトブランチをrenameすることはできますが、このリポジトリをcloneしているメンバーのローカルのブランチ名は変わりません。Web上で変更する際に、どのようなコマンドを打てば良いのかが出てくるので、そちらをローカルで実行する必要があります。
<img width="300" alt="Rename this branch" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/45528/44af986e-b2bf-8d06-b0c7-93f9aee1dcc7.png">

詳しくはこちら　[Renaming existing branches](https://github.com/github/renaming/#renaming-existing-branches)　を参照ください。

#最後に

[Regarding Git and Branch Naming](https://sfconservancy.org/news/2020/jun/23/gitbranchname/)　には以下のような記述があります。

> As a first step, Git will add a mechanism to allow users to specify the default used as the name of the first branch when creating a new repository.

今後、 `init.defaultBranch` の値のデフォルト値そのものが `main` になるんではないかと思われます。この点を考えると、今後作るリポジトリのデフォルトは `main` で良いのかもしれませんね。