Gitで差分ファイルを抽出する

古いコミットから最新までの差分ファイルを抽出する

最新のコミットは^HEADになるので^HEADから古いハッシュ値までを指定します。ハッシュは7桁でよいです。ここでは^HEADからxxxxxxxまでの差分になります。

git archive --format=zip --prefix=PATH/ HEAD `git diff --diff-filter=d --name-only ^HEAD xxxxxxx` -o DIFF.zip

構文的にはdiffしてパスを出してそれをアーカイブするという感じになっています。
archive –format=zip これはこのままでよいでしょう。他のフォーマットも指定できると思いますが。
–prefix=PATH/ 抽出したファイルを出力するパスです。省略するとgitのコマンドを実行したところにファイルができます。

`git diff --diff-filter=d --name-only ^HEAD [過去のコミットハッシュ7桁]` -o [出力ファイル名].zip

こんな感じです。

コミット間のファイル差分抽出

最新のコミットまでの差分をとっているとわかるのですが、コミット間の差分は、対象のコミットの1つ後のハッシュを選びます。
というのは最新のファイルは^HEADなので、Git上の最新コミット(コミットハッシュ)の履歴は1つ前ということになるからです。数学でいう0がはじまりか1がはじまりか…みたいな話でややこしいですがそういうことになっています。

  • yyyyyy 新しい方のコミット
  • xxxxxx 古い方のコミット
git archive --format=zip --prefix=PATH/ HEAD `git diff --diff-filter=d --name-only yyyyyy xxxxxxx` -o DIFF.zip
Last update: 2016.11.28 (月)