デフォルトブランチとは?
GitHub や Bitbucket では、リポジトリの設定画面からデフォルトブランチを設定できます。「デフォルトブランチ」は「メインブランチ」「ベースブランチ」などと呼ばれることもあります。
デフォルトブランチの設定は、主に以下の場面で使われます。
-
git clone
した時にデフォルトでチェックアウトされるブランチ - ブラウザでリポジトリを開いた時に最初に表示されるブランチ
- プルリクエスト作成時の標準のマージ先ブランチ
何も設定しないと「master」ブランチがデフォルトブランチとなります。
2020/10/07 追記:
2020年10月、GitHub は今後新たに作成するリポジトリのデフォルトブランチ名を「main」に変更すると発表しました。これまでは「master」でした。
つまりリポジトリの作成時期によってもデフォルトブランチが変わることになりますが、今後その判定としてもデフォルトブランチ名を取得したいケースが出てくるかもしれません。
デフォルトブランチの取得コマンド
方法1: git remote show を使う方法 (おすすめ)
git remote show origin | grep 'HEAD branch' | awk '{print $NF}'
origin に設定したリポジトリ (GitHub など) にリモートの詳細情報を問い合わせ、その中に含まれるデフォルトブランチ名の部分のみを抽出して出力するコマンドです。
ネットワークアクセスが発生しますが、確実に最新のデフォルトブランチ名を取得できます。
方法2: git symbolic-ref を使う方法
こちらの方法はリモートと情報を同期してからデフォルトブランチ名を出力する流れになっており、2コマンドに別れています。
# リモートから最新のデフォルトブランチの情報を取得し、
# ローカルの .git/refs/remotes/origin/HEAD に同期する
git remote set-head origin --auto
# 同期したデフォルトブランチを表示する
git symbolic-ref refs/remotes/origin/HEAD | awk -F'[/]' '{print $NF}'
なぜ同期が必要か
git symbolic-ref refs/remotes/origin/HEAD
コマンドは実質的にローカルの .git/refs/remotes/origin/HEAD ファイルの内容を表示するコマンドです。
git clone
をするとその時点のデフォルトブランチの情報がこのファイルに書き込まれますが、clone の以後にデフォルトブランチの設定を変更したりしても更新されず古い情報が残ります。
また Git の仕様上、このファイルが常に存在することは保証されていません。存在していない状態で git symbolic-ref refs/remotes/origin/HEAD
すると「fatal: ref refs/remotes/origin/HEAD is not a symbolic ref」といったエラーが発生します。
そのため事前にデフォルトブランチの情報を同期する必要があります。