場合
*.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 -- @