何かのリポジトリで作業している際、最新のmaster
ブランチに追従したい場合このようなコマンドを使うことは多いと思います。
git fetch && git rebase origin/master
ただ、現在GitHubの新規に作成されたリポジトリのデフォルトブランチは原則main
です。
2020年にこの変更が行われた結果、デフォルトブランチがmain
とmaster
両方存在してしまっている組織は多いと思います。
自分でなんとかできる範囲のものなら統一するように動けば良いですが、範囲外の場合確認する必要があります。
デフォルトブランチを確認するだけなら 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}')"