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 を使ったファイルの変更履歴の調査に関しては、以上です。
ファイルの変更履歴の確認に関する参考リンク