今回はタイトルのとおり、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-filter
にACMRTUXB
と指定することで解決できる。
git archive master --format=zip -o archive.zip `git diff --name-only master e13cfe2 --diff-filter=ACMRTUXB`