旅するえんじにあ - Engineers to Travel -

旅するエンジニアの気まま備忘録

【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時のマージも取り消したい場合等はまた別途。