背景
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の基礎の応用