「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` のようなコミットハッシュ