36
36

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2014-09-13

背景

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

36
36
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
36
36

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?