「git pullしたら何故かファイルが無くなっておりビルドが通らなくなった」ということが過去にあり、その時に調べた方法です。一部変えれば削除だけでなく追加も調べられるのでついでに。
(追記)以下のようなことをしなくても削除コミットは、
git log だけで調べられます。この時1番最初に出てきたログが削除コミットです。<relative-filepath>はリポジトリルートからの相対パスが入ります。
削除コミット
追加コミット
削除コミット
for h in $(git log --no-merges --format="%H" -- )
do
if test $(git show $h --name-only --format="" --diff-filter D | grep )
then
echo $h
break
fi
done
# あれば `cfb0099a5ea07f474bbe197783d96ac5294d85dd` のようなコミットハッシュ 2つある<filename>へは削除されたファイル名の相対パスを書きます。
このスクリプトの本体は大体、
git show --name-only --format="" --diff-filter D | grep を繰り返し実行してることになります。
この1行は<commit-hash>のコミットで削除されたファイルの中から<filename>なものがあるか調べるコマンドです。showに--diff-filter Dを追加するとそうした削除したファイルのみを表示させることができます。
また--name-onlyを付けてファイル名だけ、--format=""で、
commit
Author:
Date: のようなヘッドが出力されないようにしてます。
対象のファイルが出現したタイミング(削除されたコミット)を見つけると、そのコミットハッシュを表示して処理を終わります。そして見つけたコミットはgit show <commit-hash>でじっくり眺めることができます。
追加コミット
--diff-filterはファイルの状態で絞り込むオプションです。例えば削除ならD、追加ならA、変更ならMのように指定します。
もう大体お分かりのように追加コミットを調べるには--diff-filterをAに変更するだけです。
for h in $(git log --no-merges --format="%H" -- )
do
if test $(git show $h --name-only --format="" --diff-filter A | grep )
then
echo $h
break
fi
done
# あれば `cfb0099a5ea07f474bbe197783d96ac5294d85dd` のようなコミットハッシュ