理系学生日記

おまえはいつまで学生気分なのか

git log で特定日時以降に変更したファイル一覧を取得する

Git を用いて、特定日時以降に更新されたファイルの一覧を取得したい要件がありました。

これを素直に取得する方法がなさそうだったので、以下のようにして代用しています。

$ git log --after 2020/07/01 --name-only --pretty=oneline --full-index | grep -vE '^[0-9a-f]{40}' | sort -u

オプション

指定しているオプションは以下です。

  • --after
    • 特定日時以降のコミットを対象とするフィルタです。
  • --name-only
    • git log の出力に、各 commit で変更されたファイル名を出力できるようにします。
  • --pretty=oneline
    • git log で出力されるログを、<sha1> <title line> という 1 行形式にまとめます。
  • --full-index
    • commit hash 40 文字を全文字出力できるようにします

解法

ファイル名だけを取り出すことは Git だけだとできなさそうでした。 このため、--name-only で表示できるようになるファイル名以外を grep で除外する必要がありました。

grep でできるだけ正確に「ファイル名以外を除外する」ために、 --pretty=oneline--full-index でコミットログ行を 1 行だけにまとめています。そして、当該行は commit hash 40 文字が行先頭にあるか否かで判断するようにしています。

果たして

良い方法は無いものか…。