🔍

git logをfzfに流してcommitのshaをさっと選びたい

2020/12/04に公開

たまに遭遇するあのcommitのshaが欲しいとき用の便利fzf。ついでにpreviewも見れる。
zsh環境想定。

select_commit_from_git_log() {
  git log -n1000 --graph --color=always --format="%C(auto)%h%d %s %C(black)%C(bold)%cr" "$@" |\
    fzf -m --ansi --no-sort --reverse --tiebreak=index --preview 'f() {
      set -- $(echo "$@" | grep -o "[a-f0-9]\{7\}" | head -1);
      if [ $1 ]; then
        git show --color $1
      else
        echo "blank"
      fi
    }; f {}' |\
    grep -o "[a-f0-9]\{7\}" |
    tr '\n' ' '
}
function insert_selected_git_logs(){
    LBUFFER+=$(select_commit_from_git_log)
    CURSOR=$#LBUFFER
    zle reset-prompt
}
zle -N insert_selected_git_logs
bindkey "^gl" insert_selected_git_logs

cherry-pick用途なら--allを付けてもいいかもしれない。

参考
https://gist.github.com/junegunn/f4fca918e937e6bf5bad

Discussion