Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
36
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
36
Help us understand the problem. What are the problem?