Closed10
fzf でブランチ名を曖昧検索して切り替える
タイトル通りのコマンドを作って普段遣いしていたのに、転職のタイミングでそのコマンドを失ってしまったので再実装しながら今後のために記録を残しておく。
結論
alias fzc="git branch --list | cut -c 3- | fzf --preview \"git log --pretty=format:'%h %cd %s' --date=format:'%Y-%m-%d %H:%M' {}\" | xargs git checkout"
fzf 使う
Mac なら homebrew で
$ brew install fzf
デフォルトだとカレントディレクトリ以下のファイルに対して検索するけど、今回はローカルブランチに対して検索したい。
ので、余計な情報なしにブランチ一覧だけを出すコマンドを用意する。cut
使ってるのは余計なスペースとか、カレントブランチの印とかを消したいためだけどもっとキレイに出来る気がする。
$ git branch --list | cut -c 3-
これを fzf コマンドにパイプすればブランチのあいまい検索ができる
$ git branch --list | cut -c 3- | fzf
fzf は選択されたテキストが標準出力されるので、それをパイプしてチェックアウトする。
$ git branch --list | cut -c 3- | fzf | xargs git checkout
ついでに選択中のブランチに基づく git log を画面上に表示したい。
先に git コマンドを用意する。ハッシュと日付とコメントがあればまぁ良いでしょう。
git log --pretty=format:'%Cgreen%h %Cblue%cd %Creset%s' --date=format:'%Y-%m-%d %H:%M'
fzf コマンドに戻って、 --preview
オプションで選択中の文字列を元にプレビューが生成できるから、さっきの git log コマンドを入れる。
$ git branch --list | cut -c 3- | fzf --preview "git log --pretty=format:'%h %cd %s' --date=format:'%Y-%m-%d %H:%M' {}" | xargs git checkout
プレビュー内だとカラー反映されなかったからそのオプションは消した。
だいたいこれで出来たのでこれを alias にする。
alias fzc="git branch --list | cut -c 3- | fzf --preview \"git log --pretty=format:'%h %cd %s' --date=format:'%Y-%m-%d %H:%M' {}\" | xargs git checkout"
クォーテーションのエスケープがやたら難しかったけど ChatGPT さんが教えてくれた。
↑を zshrc なりに追加して完成
$ fzc
使いながらもうちょっと改良する可能性はあるけど、ここまで出来れば十分そうなので完了。
このスクラップは2023/09/30にクローズされました