Closed10

fzf でブランチ名を曖昧検索して切り替える

shingo.sasakishingo.sasaki

タイトル通りのコマンドを作って普段遣いしていたのに、転職のタイミングでそのコマンドを失ってしまったので再実装しながら今後のために記録を残しておく。

結論

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"
shingo.sasakishingo.sasaki

デフォルトだとカレントディレクトリ以下のファイルに対して検索するけど、今回はローカルブランチに対して検索したい。

ので、余計な情報なしにブランチ一覧だけを出すコマンドを用意する。cut 使ってるのは余計なスペースとか、カレントブランチの印とかを消したいためだけどもっとキレイに出来る気がする。

$ git branch --list | cut -c 3-
shingo.sasakishingo.sasaki

これを fzf コマンドにパイプすればブランチのあいまい検索ができる

$ git branch --list | cut -c 3- | fzf
shingo.sasakishingo.sasaki

fzf は選択されたテキストが標準出力されるので、それをパイプしてチェックアウトする。

$ git branch --list | cut -c 3- | fzf | xargs git checkout
shingo.sasakishingo.sasaki

ついでに選択中のブランチに基づく git log を画面上に表示したい。
先に git コマンドを用意する。ハッシュと日付とコメントがあればまぁ良いでしょう。

git log --pretty=format:'%Cgreen%h %Cblue%cd %Creset%s' --date=format:'%Y-%m-%d %H:%M'
shingo.sasakishingo.sasaki

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

プレビュー内だとカラー反映されなかったからそのオプションは消した。

shingo.sasakishingo.sasaki

だいたいこれで出来たのでこれを 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 さんが教えてくれた。

shingo.sasakishingo.sasaki

使いながらもうちょっと改良する可能性はあるけど、ここまで出来れば十分そうなので完了。

このスクラップは2023/09/30にクローズされました