ページ

2014/09/22

[zsh]peco で git をもっと便利にする

peco を導入しました。すごく便利です。
導入についてはコチラ↓
peco を導入した | DevAchieve

peco で色々フィルタリングして選択できるのは
ファイル、ハッシュ、ブランチを選択する事が多い Git と相性が良さそうです。

peco script を色々作るとエイリアスとか大変っぽいので
zsh のグローバルエイリアスを使ってみました。

編集されたファイルをフィルタリングする

function peco-git-changed-files(){
    git status --short | peco | awk '{print $2}'
}
alias -g F='$(peco-git-changed-files)'

使い方

git add F
Ctrl + Space で複数ファイル選択して add も可能です。

コミットのハッシュをフィルタリングする

function peco-git-hash(){
    # git log --oneline --branches | peco | awk '{print $1}'
    git lg | peco | sed -e "s/^[\*\|][ |\\\/\*]*//g" | awk '{ print $1 }'
}
alias -g F='$(peco-git-hash)'
[alias]
 lg = log --all --graph --decorate --oneline
git lg (log graph) は僕の git log を置き換えるコマンドです。
以下のようにコミットが確認できるので履歴確認、ブランチ確認、マージする際に便利なコマンドです。

peco ではこの色付けがなくなってしまうので残念です。頑張って保持して欲しいところ。

使い方

git diff F とか git cherry-pick F とか。
おおよそコミットのハッシュを指定するところ全てで使えるんじゃないですかね?
git diff で複数選択とか便利です。

ブランチをフィルタリングする

function peco-git-branch(){
    git branch | peco | sed -e "s/^\*[ ]*//g"
}
alias -g B='$(peco-git-branch)'

使い方

git checkout B とか
git merge B とか
git diff B など。

参考

pecoでgit向けの汎用的なフィルターを2つ作成してみた - Qiita
私のpeco活用事例 - k0kubun's blog