[小技] Gitの操作をインタラクティブに取り消す


Git操作を頻繁に間違えるおっちょこちょい(例: @sei40kr )な人に。

インタラクティブフィルターを導入

fzf, peco などのインタラクティブなフィルターを導入しておきます。

.zshrc
zplug 'junegunn/fzf-bin', from:gh-r, as:command, use:'*linux*amd64*', rename-to:fzf
zplug 'junegunn/fzf', use:'shell/{completion,key-bindings}.zsh'

関数を定義

.zshrc
_git-undo-fzf() {
    git reflog 2>/dev/null | \
      perl -lpe 's/^\S+\s+HEAD@\{(\d+)\}/$1/' | \
      fzf | \
      awk -F ':' '{ print "HEAD@{" $1 "}" }' |
      xargs git reset --hard
}

zle -N _git-undo-fzf

fzf を使った例です。選択された項目を標準出力で返す仕様であれば、 fzf を書き換えるだけで応用可能です。

キーを割り当て

.zshrc
bindkey '^x^z' _git-undo-fzf

Ctrl-X + Ctrl-Z で...

おしまい。