広島Git勉強会@pecosantoyobegit log の使えるオプションについて語るというナイスなセッションがありました。

その中で git log -S の紹介がありましたが、説明が難しそうなので、さらっと流れてしました。 折角なので実例を紹介します。

複数人でプログラムを書いてると、「このコード書いたの誰だよwww」 的なことが稀にあります。

例えばこんなコードがあるとします。

class Sample
  def hoge
    hogehoge_gorogoro.to_sym.to_s
  end

  def hogehoge_gorogoro
    "hogehoge_gorogoro"
  end
end

hogehoge_gorogoro.to_sym.to_s ってなんだよ!! 意味あるのかよ!」 みたいなことがあると思います。

そんな時はすかさず git blame を利用します。

みやすさの都合上、emacs の magit-blame を利用します。

magitt

e92db224 で変更されていることがわかります。

ちょっとこの時のコミットを見てみましょう。

git show e92db224

git show e92db224

インデントの修正されているだけで、大した情報が得られません。 こんなときに git log -S を使います。

git log -S 'hogehoge_gorogoro' --patch

変更内容が見たいので、 --patch をつけました。

git log -S

「なんだよ。initial commit ではじめからそーなのかよ!!」 なんて展開でした。 ちょっと例が凝れてなくて便利さが伝わりにくいかもしれません。

diff の内容から更に git log -S で追ってみたりできます。 もし良いコミットログがあれば、コードの意図がわかったり チケットID などが記載されていれば、そちらを参照することになります。

「なんだよ。書いたのオレじゃねーか!! orz」 なんてこともよくあります。が、気を落とさず綺麗なコードを書いていきたいですね。

お試しあれ。

関連