git logでファイルの変更履歴を確認。問題のコミットを特定!

最終更新:2017-07-03 by Joe

git logで、特定のファイルの変更履歴を確認し、ファイル内の特定の変更が発生したコミットを見つける方法です。

「あれ?これ、いつからこうなってるんだろ・・?」

「ってか、誰がやったんだろ・・(疑惑の念)」

などというタイミングはチームでの開発中は結構あるはずで、覚えておいて損はないコマンドのはずです。これであなたのチーム内に潜む、バグを仕込んだ犯人を発見できます!

ファイルの変更履歴を確認するgit logオプション

変更の履歴を確認する「git log」への「-p」オプションで、パスや、ファイルを限定する事ができます。

// 特定のファイルの変更を確認する
git log -p path/to/file.txt

このオプションは、ファイル内のコミット内容をすべて表示しますので、

変更履歴が大量に出力されるかもしれません。--word-diffにして、変更を1行ではなく、行内で表します。コンパクトになります。

// 特定のファイルの変更を確認する
git log --word-diff -p path/to/file.txt

特定のユーザのコミット履歴を見る

pオプションだけでは、まだ変更内容が多すぎて絞り込むのが大変だったので、怪しいチームメンバーで絞り込みます。今回、あなたが疑っている、チームの新人「タダシ」さんのコミットを確認します。

--authorコマンドは、コミットauthorに特定の文字列を含むコミットだけに限定します。

// tadashiさんの変更履歴だけを確認する
git log --word-diff --author tadashi -p path/to/file.txt

特定のコミットから、過去3回分のログを見る

まだコミットログが多いので、だいたいあたりを付けたコミットタイミングから、いくつかの変更コミットを詳しく見てみます。

起点となるコミット指定し、「-n 3」で3回分だけの出力を行います。

// 3コミット分だけ出力する
git log --word-diff <commit>  -n 3 -p path/to/file.txt

 

・・・、さて、犯人は見つかったでしょうか?

もし本当に、タダシさんの不注意だったとしても、決して咎める事なく、優しく伝えてあげて下さい。(あなた優しさは、地球を一周して、やがてあなたに帰ってくると思います。)

過失の糾弾にメリットはありません。あなたのチームに必要なのは、みんながより効率よく、また、気持ちよく開発を進められることだと思います。

git log を使ったファイルの変更履歴の調査に関しては、以上です。

ファイルの変更履歴の確認に関する参考リンク