Gitでコミット間の差分ファイルを抽出する

やりたい事

コミットとコミットの間で変更があったファイルだけを抽出したい。
差分ファイルだけ集めて提出、なんてよくあるよね。


まず

git config --global core.quotepath false

を設定。
これを設定すると、git diff --name-onlyで取得するファイル名が日本語も使えるようになる。
上記の設定がtrueだとgit archiveを実行時に失敗する。

git archive --format=zip HEAD `git diff リビジョン --name-only --diff-filter=AM` -o ファイル名.zip

で差分の詰まったzipファイルが生成できる。

  1. リビジョンの部分にはgit log等で得られるリビジョンやブランチ名を指定する。
  2. --formatで他の形式(tarとか)にも変更可能
  3. -oオプションでファイルを生成してくれる
  4. git diff --diff-filterにD以外のものを指定する。もしかしたらAM以外のオプションも加えた方が良いかもしれない。


``で囲われたファイルだけを抽出してくれるものらしい。
ので、ここをいじれば差分以外の何かをひとまとめにzipに出来る可能性がある。


他のサイトではgit diff --name-onlyで差分取得出来るって書いてあるけど、削除やリネームしたファイルが存在しないので

fatal: path not found: ファイル名

が出て正しくzipファイルが生成されない。
これは最新ソースに削除やリネームしたファイルが存在しないために発生すると思われる。
そこで、--diff-filterを設定する事で削除済みファイルをdiffで表示しないようにしてあげると上手くいく。

ファイル名だけ抽出したい

git diff --stat --name-only コミット