pecoでgit向けの汎用的なフィルターを2つ作成してみた


背景

pecoを導入してからgit向けのフィルターを作成しようと考えていたのですが、gitには多くのコマンドが存在するためにそれぞれのフィルターを作成すると覚えることが大変になったり、ショートカットやグローバルエイリアスを食いつぶしてしまうという問題がありました。

そこでこの2つさえあればgitを便利に使うことができる!というフィルターを作成してみました。

コミットやブランチのハッシュをフィルターする

gitを使っていると特定のコミットを指定したくなることが多くあります。
git reset,git rebase,git log,git show,git diff,git cherry-pickなどなど

このときにHEADやその1つ前ならHEAD~などで対応できますが、多く遡る場合はgit logをしてからハッシュをコピーして貼り付けるという手間がかかることをしていました。

そこでこれを改善するためにpecoを用いてgit logからコミットのハッシュを容易に絞り込めるフィルターを作成しました。
入力する際はコミットログで絞り込むこともできますし、ブランチ名からも絞り込むことができます。

 function git-hash(){                                    
   git log --oneline --branches | peco | awk '{print $1}'
 }                                                       

またグローバルエイリアスかショートカットとして登録するとより便利に使うことができます。
グローバルエイリアスの例

alias -g H='$(git-hash)'

使用例

以下のコマンドを実行するとpecoのフィルターが実行されます。

git diffのように複数のハッシュを選択する必要がある場合にはpecoのフィルタリング画面でC-SPCを押すことにより複数選択が可能です。

$ git diff H

編集されたファイルをフィルターする

主にgit addのために使いますが、もちろんgit checkoutやその他のコマンドの--とも使うことができます。

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

先ほどと同様にグローバルエイリアスかショートカットとして登録するとより便利に使うことができます。
グローバルエイリアスの例

alias -g F='$(git-changed-files)'

使用例

以下のコマンドを実行するとpecoのフィルターが実行されます。
git addも先ほどと同様にC-SPC複数ファイルをadd可能です。

$ git add F

その他参考

上記ではグローバルエイリアスに登録して利用する方法を紹介しましたが、他にもショートカットとして登録するなど別の使い方があるので自分にあった方法を探してみてください。

ショートカットの登録方法などは以下参照
pecoの基礎の応用