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
していても、復活できます。
これでプルリクに復活します。
そして、これをマージします。
先程と例が変わっていますが、プルリクして復活させたものになります。
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
で元に戻します。
ここからコミットしていけば、修正が反映されます。
修正が終わったら再度プルリクします。
まとめ
ローカルよりも、本番でやらかした時の対処法が一番重要。