15
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

git コマンドでデフォルトブランチ名を取得する

Last updated at Posted at 2019-03-07

デフォルトブランチとは?

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」といったエラーが発生します。

そのため事前にデフォルトブランチの情報を同期する必要があります。

参考

15
10
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?