git で一つ前のコミットとのdiffをとってarchiveするのに手間取った

HEAD^ と HEAD の間でtest.htmlといういらないファイルを削除してたとき、
このへん、やこのへんを参考に、
下記のようなコマンドをうっていた。

git archive --format=zip HEAD `git diff --name-only --diff-filter=AMCR HEAD HEAD^` -o archive.zip
 

すると

fatal: path spec 'test.html' did not match any files

と怒られた.


問題は、HEAD HEAD^の部分で、新しい→古い のgit diff のため、test.htmlは新しいHEADからすると ADD状態になるということ。


つまり、 "--diff-filter=AMCR"だと、test.htmlまで含まれてしまうのだ! "--diff-filter=MCRD" でうまくいくが、気持ち悪いので、

git archive --format=zip HEAD `git diff --name-only --diff-filter=AMCR HEAD^ HEAD` -o archive.zip
 

のように、HEAD^(古い) → HEAD(新しい) で設定し、
diff-filter をAMCR にして、test.htmlが抽出されなくなった。


よかった!