場合
*.fooだけ入れたと思ってたのに、実際は*.barも含んじゃっていた。
解決
checkoutを使う。
checkoutの例git checkout <commit-id> -- <file1> <file2> <fileN> # <file1> <file2> <fileN> を <commit-id> 前に戻す
例えば、さっきプッシュしちゃったコミットが対象なら
git checkout HEAD~1 -- path/to/hoge.bar
となる。
ただ、*.barとなるファイルを思ってたより多くの入れてしまったけど、手動で指定するのだるいし、*.barって簡単なパターンで絞り込めそうと考えた場合。
とりあえず全ファイル一覧は、diffを使って取り出すことができる。
diffの例git diff --stat --name-only <commitA> <commitB> # <commitA> 時点と <commitB> 時点で異なるファイル一覧 git diff --stat --name-only <commitA> // 多分HEADと
さっきプッシュしちゃったコミットから取りたいので、HEAD~1でOK。grepで狙ったファイルに絞る。
git diff --stat --name-only HEAD~1 | grep *.bar
あとは、xargsとかでファイル一覧をまとめてcheckoutに渡すようにすれば完了す🎉
git diff --stat --name-only HEAD~1 | grep .bar| xargs -I@ -n 100 git checkout HEAD~1 -- @