git log で特定のコミッタをフィルタする
git log の出力を特定のコミッタのものだけに絞りたいときは git log --author=foo
ってできるのだけど、git log --not-author=foo
的なことは存外できなくて困った。というのも、特定の人の差分がどうしても巨大になってしまう場面というのがあって、しばらく頑張ってスクロールして逃れてたのだけど、ページ送りでスクロールしても許容できないレベルになったのでチラッと調べてみた。
結論として、以下のような関数を .bashrc に書いて心の安息を得た。
function git-log-exclude-author() {
G=''
for n in $@
do
G=$G"| /bin/grep -v $n "
done
eval "git log --format='%H %an' $G | cut -d' ' -f1 | xargs -n1 git --no-pager log -p -1";
}
以下のようにすると、foo さんと bar さんのコミットはフィルタされる。
$ git-log-exclude-author foo bar | less -r
リポジトリの分割は用法用量を守って。
See Also