LoginSignup
2
0

More than 5 years have passed since last update.

さっき git push しちゃったコミットに含まれる一部のファイルだけを revert する

Last updated at Posted at 2017-09-17

場合

*.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 -- @
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0