dotfiles盆栽記3: pecoを利用した曖昧git switch

github.com

モチベーション

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'.

参考