【git】 git revert で変更を元に戻す
たまにありますよね。 あーーーーpull requestで先に入れないといけないbranchあったのに マージする順番間違えたー
はい僕です。
そんな時あー面倒くさいどうしようってちょっと混乱気味になって
git reset --hardで戻して・・・git push -f...でいいかな?
とかやってると次そのbranchが共有すべきbranchで
別の人がpullしようと思ったらできなくなるみたいな。
ってことで今回はgit revertです。 もちろんgit rebase -iとかでも良いのですが 間違いは認めてとりあえず戻そうみたいな感じです。
ただ上記に書いた「戻そう」という表現はある意味間違っています。
何故かというと今回のgit revertという作業はcommitに対してその前の状態に戻すというか 新しくその前の状態にcommitするという感じなのです。
やってみれば早いですね。
まずは適当にbranchを切ります。
今回は* feature/revert_test
というbranchを切りました。
更に2回くらいcommitしてみましょう。
commit e39a5f73e5ffaf2ef1c956a05d73f13f9aff431d Author: deadcode Date: Tue Jun 2 18:10:26 2015 +0900 add var_dump. commit 1409869b3da7d478d6f541b6ac8507d8a5c51241 Author: deadcode Date: Tue Jun 2 18:10:02 2015 +0900 add comment.
こんな形でcommitをしてみました。
何をしたかというと
commit e39a5f73e5ffaf2ef1c956a05d73f13f9aff431d Author: deadcode Date: Tue Jun 2 18:10:26 2015 +0900 add var_dump. diff --git a/controllers/app/SampleController.class.php b/controllers/appindex 3a72df2..9522164 100644 --- a/controllers/app/SampleController.class.php +++ b/controllers/app/SampleController.class.php @@ -2,7 +2,7 @@ // ここにコメントを入れてみました。 - +var_dump('test'); commit 1409869b3da7d478d6f541b6ac8507d8a5c51241 Author: deadcode Date: Tue Jun 2 18:10:02 2015 +0900 add comment. diff --git a/controllers/app/SampleController.class.php b/controllers/appindex 9dadae8..3a72df2 100644 --- a/controllers/app/SampleController.class.php +++ b/controllers/app/SampleController.class.php @@ -1,4 +1,25 @@ <?php +// ここにコメントを入れてみました。 + + + + + + + + + + +
こんな感じでコメントと空行を入れてcommitした後に、var_dump
を入れました。
この状態でvar_dumpを誤ってcommitしてpushしてしまったとします。
更にそのbranchは共有しているbranchでgit reset --hard HEAD^
とかでlocalは戻るとしても
force pushしようものなら共有している作業者が困る事になります。
ということで早速revertしてvar_dumpが入る前のcommitに戻してあげましょう。
この場合git revertを使うのですが、git revert 後commitIDを入れてあげる必要があります。 今回の場合、var_dumpを入れたcommitをadd commentのcommitを戻すので
commit e39a5f73e5ffaf2ef1c956a05d73f13f9aff431d add var_dump. commit 1409869b3da7d478d6f541b6ac8507d8a5c51241 add comment.
e39a5f73e5ffaf2ef1c956a05d73f13f9aff431d
を指定します。
CommitIDはフルIDでなくてもいいのですが、せっかくgit log
で出てくるので。
行ったcommitを戻すってイメージですね。
早速実行してみましょう。
$ git revert e39a5f73e5ffaf2ef1c956a05d73f13f9aff431d
すると以下のような画面になります。
Revert "add var_dump." This reverts commit e39a5f73e5ffaf2ef1c956a05d73f13f9aff431d. # Please enter the commit message for your changes. Lines starting # with '#' will be ignored, and an empty message aborts the commit. # On branch feature/revert_test # You are currently reverting commit 1409869. # # Changes to be committed: # modified: controllers/app/SampleController.class.php #
この画面を編集すればCommit commentに反映されます。 今回はこのまま編集を終了させます。
$ git revert e39a5f73e5ffaf2ef1c956a05d73f13f9aff431d [feature/revert_test 6b3bb17] Revert "add var_dump." 1 file changed, 1 insertion(+), 1 deletion(-)
うまくいったみたいですね。 早速ログを見てみましょう。
commit 6b3bb174b5fd2316c99da9bbd8133023d5e75e48 Author: deadcode Date: Tue Jun 2 18:27:51 2015 +0900 Revert "add var_dump." This reverts commit e39a5f73e5ffaf2ef1c956a05d73f13f9aff431d. diff --git a/controllers/app/SampleController.class.php b/controllers/appindex 9522164..3a72df2 100644 --- a/controllers/app/SampleController.class.php +++ b/controllers/app/SampleController.class.php @@ -2,7 +2,7 @@ // ここにコメントを入れてみました。 -var_dump('test'); + commit e39a5f73e5ffaf2ef1c956a05d73f13f9aff431d Author: deadcode Date: Tue Jun 2 18:10:26 2015 +0900 add var_dump. diff --git a/controllers/app/SampleController.class.php b/controllers/appindex 3a72df2..9522164 100644 --- a/controllers/app/SampleController.class.php +++ b/controllers/app/SampleController.class.php @@ -2,7 +2,7 @@ // ここにコメントを入れてみました。 - +var_dump('test');
こんな風になりました。 今回revertすることにより、追加されたvar_dump('test')が消された状態のものが用意され、それをcommitしたことになりました。
これがrevertになります。
他にもpull request時のマージも取り消したい場合等はまた別途。