モチベーション
git switchする際に、毎回事前にgit branchでswitch対象のbranchを調べている。手間なのと、曖昧検索ができるpecoを使って便利に自動化したい。
こうした
alias gsp='git switch `git branch | peco | sed -e "s/*//g"`'
解説
まず、git branchをpecoで曖昧検索したものをgit switchに渡すようにする。
> git switch `git branch | peco`
` `
はgrave accentと呼ばれ、zshの展開の文脈ではCommand Substitution*1に分類される。上記のコマンドだとCommand Substitution以外の展開項目はないため、git branch | peco
が最も早く実行される。
先のコマンドで表題の目的はほとんど叶えられるが、現在のブランチを指定したときにエラーが出る。
> git switch `git branch | peco` fatal: only one reference expected
これは、以下のようにgit branchでは現在のブランチ名の前に *
が表示されるため、pecoで選択したときにこのアスタリスクも含まれてしまい、それがgit switchに渡ってしまうために起こる。
> git branch | peco
* develop
素直にsedで置換してあげることで解決した。
# 現在のブランチが `develop` -> pecoで `develop` を選択 > git switch `git branch | peco | sed -e 's/*//g'` Already on 'develop' Your branch is up to date with 'origin/develop'.