LoginSignup
2
0

[tips]masterかmainか確認せずデフォルトブランチでrebaseしたい

Posted at

何かのリポジトリで作業している際、最新のmasterブランチに追従したい場合このようなコマンドを使うことは多いと思います。

git fetch && git rebase origin/master

ただ、現在GitHubの新規に作成されたリポジトリのデフォルトブランチは原則mainです。

2020年にこの変更が行われた結果、デフォルトブランチがmainmaster両方存在してしまっている組織は多いと思います。
自分でなんとかできる範囲のものなら統一するように動けば良いですが、範囲外の場合確認する必要があります。

デフォルトブランチを確認するだけなら git remote show origin | grep 'HEAD branch' | awk '{print $NF}'

こちらのコマンドはブランチ一覧からHEAD branch(デフォルトブランチ)を抜き出しています。1
抜き出した状態だと、HEAD branch: masterのような文字列になっているため、awkコマンドの$NFオプションを利用してブランチ名だけを取れるようにします。2

git remote show origin | grep 'HEAD branch' | awk '{print $NF}'
# デフォルトブランチ名が出力される

一行でrebaseまでしたい場合は$()で囲ってあげる

確認だけじゃなくて、rebaseまでしたい、という場合は$()を使って先ほどのコマンドを発展させます。

git fetch && git rebase origin/$(git remote show origin | grep 'HEAD branch' | awk '{print $NF}')

$(git remote show origin | grep 'HEAD branch' | awk '{print $NF}'の出力を、rebaseした際に利用するため、こちらのコマンドを利用することによってデフォルトブランチでrebaseされます。

aliasにする時は$の前にバックスラッシュをつけよう

「よし、じゃあこのコマンドをaliasに登録しよう」と.zshrcなどに以下のように書き込みターミナルを開き直すとエラーメッセージが出ます。

alias rbdb="git fetch && git rebase $(git remote show origin | grep 'HEAD branch' | awk '{print $NF}')" 

aliasに登録する際は、コマンドが即時実行されないようにする必要がありますが、$が存在することによってgit remote show origin | grep 'HEAD branch' | awk '{print $NF}.zshrcを読み込んだ時に実行されてしまいます。

この時は以下のようにして、$の前にバックスラッシュを置いてエスケープをすることで回避できます。

alias rbdb="git fetch && git rebase \$(git remote show origin | grep 'HEAD branch' | awk '{print \$NF}')"

参考

  1. git コマンドでデフォルトブランチ名を取得する #Git - Qiita

  2. awkガナス - 組み込み変数NF(フィールド数) NR(行番号) | 株式会社創夢 — SOUM/misc

2
0
0

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
2
0