🕹

fzf で git log を見ながらブランチ移動する

2022/03/04に公開

つくったもの


このように、各ブランチの git log を見ながらブランチ移動が出来ます。

fzf とは

https://github.com/junegunn/fzf
fzf とは 標準入力から受けたデータを曖昧検索することが出来るツールです。
コマンド履歴やファイル名などをインタラクティブに絞り込むことが出来ます。

また、プレビュー機能を使うことで、行ごとのプレビューを表示することも可能です。

# {} は選択された行の文字列に置き換えられます。
fzf --preview 'cat {}'

完成形

このプレビュー機能を駆使すると上記のようなブランチ移動が可能になります。
※ 私は普段 zsh を使っているので zsh 用の設定になります。

.zshrc
function select-git-switch() {
  target_br=$(
    git branch -a |
      fzf --exit-0 --layout=reverse --info=hidden --no-multi --preview-window="right,65%" --prompt="CHECKOUT BRANCH > " --preview="echo {} | tr -d ' *' | xargs git lgn --color=always" |
      head -n 1 |
      perl -pe "s/\s//g; s/\*//g; s/remotes\/origin\///g"
  )
  if [ -n "$target_br" ]; then
    BUFFER="git switch $target_br"
    zle accept-line
  fi
}
zle -N select-git-switch
bindkey "^g" select-git-switch # 「control + G」で実行
.gitconfig
# プレビューで表示される見た目の設定です。好みに合わせて設定してください。
[alias]
	lg = log --graph --decorate --abbrev-commit --format=format:'%C(blue)%h%C(reset) - %C(green)(%ar)%C(reset)%C(yellow)%d%C(reset)\n  %C(white)%s%C(reset) %C(dim white)- %an%C(reset)'

さいごに

fzf は色々なコマンドと組み合わせられてとても便利なので是非皆さんも使ってみて下さい!

Discussion