291
281

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.

インデントコミットで真犯人がわからなくなった場合の git blame

Last updated at Posted at 2014-04-01

例えば fluentdlib/fluent/output.rb ファイルに

config_param :queued_chunk_flush_interval, :time, :default => 1

を追加したコミットがどれかを探したいとします。

しかし、git blame を見るとこんなかんじに、インデントコミットによってほぼ全ての履歴が上塗りされていてどれだかわからない、みたいな状況にどうやって真犯人を探そうかという話です。

901fb2ac4a7f791b5d2ad8660fdd5545.png

1. git blame -w を使う

インデントコミットを無視したいだけであれば git blame の -w オプションが使える。-w は比較の際に whitespace を無視してくれるオプション。git diff にもあるよね。

$ git blame -w lib/fluent/output.rb
... (省略)
14d01c71 (Masahiro Nakagawa  2013-03-27 03:56:51 +0900 181)     config_param :queued_chunk_flush_interval, :time, :default => 1
... (省略)

おぉ、見つかった。14d01c71 か => https://github.com/fluent/fluentd/commit/14d01c71eb7b0d788184cdd0af6085cdceefa1b8

2. git log -S を使う

git log の -S オプションを使う。-S は指定した文字列にマッチする + diff のある commit log のみ出してくれるオプション。-G で正規表現指定もできる。

$ git log -S 'config_param :queued_chunk_flush_interval, :time, :default => 1' lib/fluent/output.rb

commit 14d01c71eb7b0d788184cdd0af6085cdceefa1b8
Author: Masahiro Nakagawa <repeatedly@gmail.com>
Date:   Wed Mar 27 03:56:51 2013 +0900

    Add queued_chunk_flush_interval to BufferedOutput

おぉ、見つかった。14d01c71 か => https://github.com/fluent/fluentd/commit/14d01c71eb7b0d788184cdd0af6085cdceefa1b8

3. git-strata を使う

-w オプション実装してくれるっぽいのでちょっと待ってね。

4. vcs-ann を使う

@tanaka_akr さんが vcs-ann というものを作ったと教えてくれたので、試してみた。

w3m で開いて青文字部分のリンクをクリックして、対話的に履歴を追いかけていくことができる!

$ gem install vcs-ann
$ vcs-ann lib/fluent/output.rb

まずは日付をクリック

520935f87f67180dd9e3da4ebcfa3478.png

インデントコミットの差分が出た。今回はインデント前の所を追いたいので - のリンクをクリック

スクリーンショット 2014-04-01 17.09.58.png

次のコミットが出て来たのでまた日付をクリック

64aa5e5dad1a470a2c52eb7cc3ed39b7.png

出て来た!

9b208939c36270ab5fa336d1db844457.png

これは便利なんじゃないですかね?

5. tig blame を使う

@a_matsuda さんに教えてもらいました。tig blame を使えば , で辿れるとのこと。

$ tig blame lib/fluent/output.rb

640391058803a20000762e78fdb12f08.png

最初はインデントコミットのハッシュが出て来たので、カーソル行に対するその前のコミットを
, で辿る。次の blame が出て来た。

c0582d883ad70d5aa82f2000cff6dd91.png

14d01c71 ... コレかな? Enter を押すと diff が見れるので確認。

74b10a9334b8a11a5243b3addc8427de.png

これだ!見つかった!

最後に

もっとありそうな気がするのでコメントウェルカム!

291
281
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
291
281

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?