git revertでコミットを打ち消す

正確には差分を作り、commitをなかったことにします。

本日初めて使用しました。

本番環境でやらかして、焦りすぎて、わかってなかったのですが、ここで整理します。

git revert

こんなgit diffがあったとします。

diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb
index 71513a1..831a834 100644
--- a/app/controllers/users_controller.rb
+++ b/app/controllers/users_controller.rb
@@ -6,6 +6,7 @@ class UsersController < ApplicationController
   add_breadcrumb I18n.t("Listing users"), :users

   def index
+    @users = User.all
   end

   def index_pagination

これをgit commitします。

そして、git logします。

commit 079c31963bd624765207734bda6a50d076e31eee
Author: hoge <hoge@yahoo.co.jp>
Date:   Wed Jun 15 22:04:19 2016 +0900

    User全体を表示する

これをgit revertします。

git revert 079c31963bd6247 ←commitのIDです。

ここでもう一度git logします。

commit 8746f8b6219afe44a99bc27e6dc5f4915d93b19e
Author: hoge <hoge@yahoo.co.jp>
Date:   Wed Jun 15 22:05:13 2016 +0900

    Revert "User全体を表示する"

    This reverts commit 079c31963bd624765207734bda6a50d076e31eee.

これでcommitを打ち消したことになります。

ここまではローカルなんで、なんとでもなります。

問題は、本番にマージされてcloseしたやつですね。

マージ後の対処方法

まずはプルリクしてcloseものをgithubのページから、revertします。

delete brachしていても、復活できます。

https://gyazo.com/4b36a529a385e2e119ff877d54c7bc9d

これでプルリクに復活します。

そして、これをマージします。

先程と例が変わっていますが、プルリクして復活させたものになります。

commit 2c4761f559cc4cd2b80ca017528c4da22c286c3a
Merge: c8762a8 5a5b147
Author: hoge <hoge@yahoo.co.jp>
Date:   Wed Jun 15 22:27:24 2016 +0900

    Merge pull request #4 from ryosuke-endo/revert-3-hoge

    Revert "tag controllerのログイン判定を変更"

commit 5a5b147aa855e97e143073eb63a5f65893ddcf5a
Author: hoge <hoge@yahoo.co.jp>
Date:   Wed Jun 15 22:26:35 2016 +0900

    Revert "tag controllerのログイン判定を変更"

ここで新しいブランチを作成します。

ここでもう一度git revert 2c4761f559ccします。

そうすると怒られます。

error: Commit 2c4761f559cc4cd2b80ca017528c4da22c286c3a is a merge but no -m option was given.
fatal: revert failed

-m optionがないよって言われます。

ここでgit log --graph --onelineで内容を確認します。

*   2c4761f Merge pull request #4 from hoge/revert-3-hoge
|\
| * 5a5b147 Revert "tag controllerのログイン判定を変更"
|/
*   c8762a8 Merge pull request #3 from hoge/hoge
|\
| * 05a2933 tag controllerのログイン判定を変更
|/

この線が左から1..2..3のように続いていきます。

一番左が本線なんで、git revert -m 1 2c4761f559ccで元に戻します。

ここからコミットしていけば、修正が反映されます。

修正が終わったら再度プルリクします。

まとめ

ローカルよりも、本番でやらかした時の対処法が一番重要。