今回はタイトルのとおり、Gitで差分ファイルのみを取得する方法を紹介する。

git archiveとgit diffを組み合わせる

それではいきなり結論から。

git archive {$commit_id} --format=zip -o archive.zip `git diff --name-only {$from_commit_id} {$to_commit_id} --diff-filter=ACMR`

上記のコマンドにコミットIDまたはブランチ名を割り当てて実行すれば、指定したarchive.zipという名前で差分ファイルをまとめたzipファイルが出来上がる。

masterブランチと、コミットID「e13cfe2」の差分を取得する場合は以下のようなコマンドとなる。

git archive master --format=zip -o archive.zip `git diff --name-only master e13cfe2 --diff-filter=ACMR`

差分ファイルのみをまとめてアップロードする時や、納品する時などに使える便利なコマンドだ。

※2021年12月28日 追記

上記で紹介したコマンドだと、コミット間に削除ファイルが含まれる場合にfatal: pathspecエラーが発生する場合がある。

その場合は--diff-filterACMRTUXBと指定することで解決できる。

git archive master --format=zip -o archive.zip `git diff --name-only master e13cfe2 --diff-filter=ACMRTUXB`